• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ compileShader函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中compileShader函数的典型用法代码示例。如果您正苦于以下问题:C++ compileShader函数的具体用法?C++ compileShader怎么用?C++ compileShader使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了compileShader函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: glCreateShader

GLuint Shaders::loadShaderFromString(const std::string& vertexSourceCode, const std::string& fragmentSourceCode)
{
    // Create the shaders
    GLuint vertexShaderID   = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);

    GLint result = GL_FALSE;
    int infoLogLength;

    compileShader(vertexShaderID,   vertexSourceCode,   &result,  &infoLogLength);
    compileShader(fragmentShaderID, fragmentSourceCode, &result,  &infoLogLength);

    // Link the program
    GLuint programID = glCreateProgram();
    glAttachShader(programID, vertexShaderID);
    glAttachShader(programID, fragmentShaderID);
    glLinkProgram(programID);

    // Check the program
    glGetProgramiv(programID, GL_LINK_STATUS, &result);
    glGetProgramiv(programID, GL_INFO_LOG_LENGTH, &infoLogLength);
    if ( infoLogLength > 0 ){
        std::vector<char> programErrorMessage(infoLogLength+1);
        glGetProgramInfoLog(programID, infoLogLength, NULL, &programErrorMessage[0]);
        printf("%s\n", &programErrorMessage[0]);
    }

    glDeleteShader(vertexShaderID);
    glDeleteShader(fragmentShaderID);

    return programID;
}
开发者ID:sakydpozrux,项目名称:PGK,代码行数:32,代码来源:shaders.cpp


示例2: memset

bool Shader::LoadAndCompile(const std::string& sVert, const std::string& sFrag)
{
	GLhandleARB so[2]; 
	memset(so, 0, sizeof(GLhandleARB)*2);

	///Loading the shader
	so[0] = loadShader(sVert.c_str()); 
	if(so[0]==0){
		std::cerr << "loading shader "+sVert+" failed" << std::endl;
		return false;
	}

	///Compiling the shader, done by the graphic card
	if(!compileShader(so[0])){ 
		std::cerr << "compiling shader "+sVert+" failed" << std::endl;
		return false;
	}

	so[1] = loadShader(sFrag.c_str());
	if(so[1]==0){
		std::cerr << "loading shader "+sFrag+" failed " << std::endl;
		return false;
	}
	if(!compileShader(so[1])){
		std::cerr << "compiling shader "+sFrag+" failed " << std::endl;
		return false;
	}

	m_oProgram = linkShaders(so,2);
	m_bIsReady = true;
	return true;
}
开发者ID:Kambius,项目名称:burger-engine,代码行数:32,代码来源:Shader.cpp


示例3: compileShaders

static GLboolean compileShaders(const GLchar* vertexShaderSource, const GLchar* fragmentShaderSource, GLuint* shaderVertexObjectId, GLuint* shaderFragmentObjectId, GLuint* programObjectId) {
    if(!compileShader(&vertexShaderSource[0], NULL, GL_VERTEX_SHADER, shaderVertexObjectId)) {
        // Undo compilation
    }
    if(!compileShader(&fragmentShaderSource[0], NULL, GL_FRAGMENT_SHADER, shaderFragmentObjectId)){
        // Undo compilation
        return GL_FALSE;
    }
    
    *programObjectId = glCreateProgram();
    glAttachShader(*programObjectId, *shaderVertexObjectId);
    glAttachShader(*programObjectId, *shaderFragmentObjectId);
    glLinkProgram(*programObjectId);
    
    GLint linkSuccess = GL_FALSE;
    glGetProgramiv(*programObjectId, GL_LINK_STATUS, &linkSuccess);
    if (linkSuccess == GL_FALSE) {
        GLchar messages[256] = {0};
        glGetProgramInfoLog(*programObjectId, sizeof(messages), 0, &messages[0]);
        printf("Prgram compilation failed: %s", messages);
        // Undo compilation
        return GL_FALSE;
    }
    
    return GL_TRUE;
}
开发者ID:davidandreoletti,项目名称:libegl,代码行数:26,代码来源:Sample1Test.c


示例4: glCreateProgram

	bool GLSLProgram::compileShaders(const std::string& vertexShaderFilePath, const std::string& fragmentShaderFilePath)
	{
		//Create the program to bind shader in
		_programID = glCreateProgram();
		//Create shader programs:
		_vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
		if (_vertexShaderID == 0)
		{
			fatalError("Vertex shader failed to be created");
			return false;
		}

		_fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
		if (_fragmentShaderID == 0)
		{
			fatalError("Fragment shader failed to be created");
			return false;
		}

		//open, read and compile each program
		//compile vertex shader
		if (!compileShader(vertexShaderFilePath, _vertexShaderID))
		{
			return false;
		}
		//compile fragment shader
		if (!compileShader(fragmentShaderFilePath, _fragmentShaderID))
		{
			return false;
		}
		return true;
	}
开发者ID:juaxix,项目名称:cpp_gamedev,代码行数:32,代码来源:GLSLProgram.cpp


示例5: linkProgram

//------------------------------------------------------------------------------
GLuint linkProgram(const char *define) {

    GLuint vertexShader         = compileShader(GL_VERTEX_SHADER,
                                                "VERTEX_SHADER", define);
    GLuint geometryShader       = compileShader(GL_GEOMETRY_SHADER,
                                                "GEOMETRY_SHADER", define);
    GLuint fragmentShader       = compileShader(GL_FRAGMENT_SHADER,
                                                "FRAGMENT_SHADER", define);

    GLuint program = glCreateProgram();
    glAttachShader(program, vertexShader);
    glAttachShader(program, geometryShader);
    glAttachShader(program, fragmentShader);

    glBindAttribLocation(program, 0, "position");
    glBindAttribLocation(program, 1, "normal");

    glLinkProgram(program);

    glDeleteShader(vertexShader);
    glDeleteShader(geometryShader);
    glDeleteShader(fragmentShader);

    GLint status;
    glGetProgramiv(program, GL_LINK_STATUS, &status );
    if( status == GL_FALSE ) {
        GLchar emsg[1024];
        glGetProgramInfoLog(program, sizeof(emsg), 0, emsg);
        fprintf(stderr, "Error linking GLSL program : %s\n", emsg );
        exit(0);
    }

    return program;
}
开发者ID:mbdriscoll,项目名称:OpenSubdiv,代码行数:35,代码来源:viewer.cpp


示例6: glCreateProgram

void GLSLProgram::compileShaders(const std::string& vertexShaderFilePath, const std::string& fragmentShaderFilePath)
{


	//Vertex and fragment shaders are successfully compiled.
	//Now time to link them together into a program.
	//Get a program object.
	programID = glCreateProgram();


	vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
	if (vertexShaderID == 0)
	{
		std::printf("ERROR : could not create Vertex shader");
	}

	fragShaderID = glCreateShader(GL_FRAGMENT_SHADER);
	if (fragShaderID == 0)
	{
		std::printf("ERROR : could not create Fragment shader");
	}

	compileShader(vertexShaderFilePath, vertexShaderID);

	compileShader(fragmentShaderFilePath, fragShaderID);


}
开发者ID:ckosidow,项目名称:CPPGame,代码行数:28,代码来源:GLSLProgram.cpp


示例7: compileShader

	void GpuProgram::create(const char* vs, const char* fs) {
		GLuint vertexID = compileShader(vs, GL_VERTEX_SHADER);
		GLuint fragmentID = compileShader(fs, GL_FRAGMENT_SHADER);

		name_ = glCreateProgram();
		OGLERROR;
		glAttachShader(name_, vertexID);
		OGLERROR;
		glAttachShader(name_, fragmentID);
		OGLERROR;
		glLinkProgram(name_);
		OGLERROR;

#ifdef _DEBUG
		glGetProgramiv(name_, GL_LINK_STATUS, &success_);
		OGLERROR;
		if (!success_) {
			glGetProgramInfoLog(name_, 512, nullptr, logProgram_);
			OGLERROR;
			printf("%s", logProgram_);
	}
#endif

		glDeleteShader(vertexID);
		OGLERROR;
		glDeleteShader(fragmentID);
		OGLERROR;
}
开发者ID:robinfaury,项目名称:engine,代码行数:28,代码来源:gpuprogram.cpp


示例8: buildProgram

GLProgram buildProgram(VSrc&& vsrc, GSrc&& gsrc, FSrc&& fsrc) {
    GLShader vs = compileShader(GL_VERTEX_SHADER, std::forward<VSrc>(vsrc));
    GLShader gs = compileShader(GL_GEOMETRY_SHADER, std::forward<GSrc>(gsrc));
    GLShader fs = compileShader(GL_FRAGMENT_SHADER, std::forward<FSrc>(fsrc));

    return buildProgram({ std::move(vs), std::move(gs), std::move(fs) });
}
开发者ID:Celeborn2BeAlive,项目名称:c2ba-glutils,代码行数:7,代码来源:GLProgram.hpp


示例9: loadShaders

void loadShaders(GLuint *_positionSlot, GLuint *_colorSlot) {
  GLuint vertex   = compileShader(GL_VERTEX_SHADER, VERTEX_SHADER_CODE);
  GLuint fragment = compileShader(GL_FRAGMENT_SHADER, FRAGMENT_SHADER_CODE);

  GLuint program = glCreateProgram();
  glAttachShader(program, vertex);
  glAttachShader(program, fragment);
  glLinkProgram(program);

  GLint linkSuccess;
  glGetShaderiv(program, GL_COMPILE_STATUS, &linkSuccess);
  if (linkSuccess == GL_FALSE) {
    GLchar messages[256];
    glGetProgramInfoLog(program, sizeof(messages), NULL, &messages[0]);
    printf("Program linking error: %s\n", messages);
    exit(1);
  }

  glUseProgram(program);

  *_positionSlot = glGetAttribLocation(program, "Position");
  *_colorSlot = glGetAttribLocation(program, "SourceColor");
  glEnableVertexAttribArray(*_positionSlot);
  glEnableVertexAttribArray(*_colorSlot);

  return;
}
开发者ID:fasterthanlime,项目名称:hello-sdl2-ios6,代码行数:27,代码来源:shaders.c


示例10: init

void init(Data*data){
  data->cameraTransform = std::make_shared<OrbitCamera>();
  data->cameraProjection = std::make_shared<PerspectiveCamera>(
      glm::half_pi<float>(),
      (float)data->window.width/data->window.height);

  data->program = createProgram(
      compileShader(GL_VERTEX_SHADER  ,loadFile("shaders/orbitManipulator.vp")),
      compileShader(GL_FRAGMENT_SHADER,loadFile("shaders/orbitManipulator.fp")));

  data->mvpUniform = glGetUniformLocation(data->program,"mvp");

  glGenBuffers(1,&data->vbo);
  glBindBuffer(GL_ARRAY_BUFFER,data->vbo);
  float vertices[]={0,0,0,1, 1,0,0,1, 0,1,0,1};
  glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);

  glGenVertexArrays(1,&data->vao);

  glBindVertexArray(data->vao);
  glBindBuffer(GL_ARRAY_BUFFER,data->vbo);

  glEnableVertexAttribArray(0);
  glVertexAttribPointer(0,4,GL_FLOAT,GL_FALSE,sizeof(float)*4,0);

  glBindVertexArray(0);

  glClearColor(0,0,0,1);
  glDisable(GL_CULL_FACE);
}
开发者ID:dormon,项目名称:fit_opengl_examples,代码行数:30,代码来源:orbitManipulator.cpp


示例11: showShaderInfoLog

GLuint ShaderManager::buildProgram(const Shader& vshaderInstance, const Shader& fhaderInstance, const Shader& ghaderInstance)
{	
    if (!compileShader(vshaderInstance))
    {
        showShaderInfoLog(vshaderInstance);
    }
    if (!compileShader(fhaderInstance))
    {
        showShaderInfoLog(fhaderInstance);
    }
    if (!compileShader(ghaderInstance))
    {
        showShaderInfoLog(ghaderInstance);
    }

    GLuint program = glCreateProgram();
    glAttachShader(program, vshaderInstance.getID());
    glAttachShader(program, fhaderInstance.getID());

    glLinkProgram(program);
    GLint linked;
    glGetProgramiv(program, GL_LINK_STATUS, &linked);
    if (!linked)
    {
        showProgramInfoLog(program);
    }

    glDeleteShader(vshaderInstance.getID());
    glDeleteShader(fhaderInstance.getID());

    return program;
}
开发者ID:ampawd,项目名称:opengl-demo,代码行数:32,代码来源:shader_manager.cpp


示例12: LoadShaders

GLuint LoadShaders(const char *vertFile,const char * fragFile)
    {
    GLuint vShaderID = glCreateShader(GL_VERTEX_SHADER);
    GLuint fShaderID = glCreateShader(GL_FRAGMENT_SHADER);
    char * vShaderSource = readFile(vertFile);
    char * fShaderSource = readFile(fragFile);
    compileShader(vShaderID, vShaderSource);
    compileShader(fShaderID, fShaderSource);
    GLuint programID = glCreateProgram();
    glAttachShader(programID, vShaderID);
    glAttachShader(programID, fShaderID);
    glLinkProgram(programID);
    GLint result;
    int infoLogLength;
    glGetProgramiv(programID, GL_LINK_STATUS, &result);
    if (result != GL_TRUE)
        {
        glGetProgramiv(programID, GL_INFO_LOG_LENGTH, &infoLogLength);
        char *buf = (char *)malloc(infoLogLength+1);
        glGetProgramInfoLog(programID, infoLogLength, NULL, buf);
        fprintf(stderr,"%s\n", buf);
        free(buf);
        }
    glDeleteShader(vShaderID);
    glDeleteShader(fShaderID);
    return programID;
    }
开发者ID:davepape,项目名称:beadgame,代码行数:27,代码来源:main.cpp


示例13: glCreateProgram

void Shader::load() {
    Renderer *renderer = Naquadah::getRenderer();
    if (renderer != nullptr) {
        std::string vertexCode = FileIO::mergeLines(FileIO::readTextFile(vertexFilename));
        std::string fragmentCode = FileIO::mergeLines(FileIO::readTextFile(fragmentFilename));
        std::string geometryCode = FileIO::mergeLines(FileIO::readTextFile(geometryFilename));
        std::string tessCtrlCode = FileIO::mergeLines(FileIO::readTextFile(tessCtrlFilename));
        std::string tessEvalCode = FileIO::mergeLines(FileIO::readTextFile(tessEvalFilename));

        this->program = glCreateProgram();
        vertexId = compileShader(program, GL_VERTEX_SHADER, vertexCode.c_str());
        fragmentId = compileShader(program, GL_FRAGMENT_SHADER, fragmentCode.c_str());
        if (geometryCode.size() > 0)
            geometryId = compileShader(program, GL_GEOMETRY_SHADER, geometryCode.c_str());
        if (tessCtrlCode.size() > 0 && tessEvalCode.size() > 0) {
            tessCtrlId = compileShader(program, GL_TESS_CONTROL_SHADER, tessCtrlCode.c_str());
            tessEvalId = compileShader(program, GL_TESS_EVALUATION_SHADER, tessEvalCode.c_str());
        }
        setDefaultAttributes();
        if (linkProgram(program))
            valid = true;
    } else
        valid = false;
    loaded = true;
}
开发者ID:roooodcastro,项目名称:city-rendering-engine,代码行数:25,代码来源:Shader.cpp


示例14: compileShader

GLuint shaderhelper::createProgram(const std::string & vertexFilename, const std::string & fragmentFilename)
{
    GLuint vertexShaderId = compileShader(vertexFilename, GL_VERTEX_SHADER);
    GLuint fragmentShaderId = compileShader(fragmentFilename, GL_FRAGMENT_SHADER);

    GLuint programId = glCreateProgram();
    glAttachShader(programId, vertexShaderId);
    glAttachShader(programId, fragmentShaderId);
    glLinkProgram(programId);

    GLint compilationSuccess = GL_FALSE;
    int infoLogLength;
    glGetProgramiv(programId, GL_LINK_STATUS, &compilationSuccess);
    glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &infoLogLength);

    if (infoLogLength > 0) {
        std::vector<char> programErrorMessage((unsigned long) (infoLogLength + 1));
        glGetProgramInfoLog(programId, infoLogLength, nullptr, &programErrorMessage[0]);
        throw std::runtime_error(&programErrorMessage[0]);
    }

    glDeleteShader(vertexShaderId);
    glDeleteShader(fragmentShaderId);

    return programId;
}
开发者ID:andystanton,项目名称:glfw-skeleton,代码行数:26,代码来源:shaderhelper.cpp


示例15: glCreateShader

GLuint ShaderProgram::loadShaders(const char * vertex_file_path, const char * fragment_file_path ) {
    // Create the shaders
    GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
    GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);

    // Compile both shaders. Exit if compile errors.
    if ( !compileShader(vertex_file_path, VertexShaderID)
         || !compileShader(fragment_file_path, FragmentShaderID) ) {
        return 0;
    }

    // Link the program
    GLuint ProgramID = glCreateProgram();
    glAttachShader(ProgramID, VertexShaderID);
    glAttachShader(ProgramID, FragmentShaderID);
    glLinkProgram(ProgramID);

    // Check the program
    GLint Result = GL_FALSE;
    int InfoLogLength;
    
    glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
    glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    if ( InfoLogLength > 0 ) {
        std::vector<char> ProgramErrorMessage(InfoLogLength+1);
        glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
        std::cerr << &ProgramErrorMessage[0] << std::endl;
    }

    glDeleteShader(VertexShaderID);
    glDeleteShader(FragmentShaderID);

    return ProgramID;
}
开发者ID:jackgerrits,项目名称:opengl-car-game,代码行数:34,代码来源:ShaderProgram.cpp


示例16: buildProgram

GLuint buildProgram(const char *vert_shader_source, const char *frag_shader_source)
{
  /* compile the vertex shader */
  GLuint vert_shader = compileShader(GL_VERTEX_SHADER, vert_shader_source);
  if (vert_shader == 0)
  {
    return 0;
  }

  /* compile the fragment shader */
  GLuint frag_shader = compileShader(GL_FRAGMENT_SHADER, frag_shader_source);
  if (frag_shader == 0)
  {
    glDeleteShader(vert_shader);
    return 0;
  }

  /* link the shaders together */
  GLuint program = linkProgram(2, vert_shader, frag_shader);

  /* delete shader objects, so that when user destroys the program object,
     the shaders will be freed too */
  glDeleteShader(frag_shader);
  glDeleteShader(vert_shader);

  return program;
}
开发者ID:jcxz,项目名称:GMU,代码行数:27,代码来源:ogl_lib.cpp


示例17: linkDebugProgram

void linkDebugProgram() {

    if (g_debugProgram)
        glDeleteProgram(g_debugProgram);

    GLuint vertexShader = compileShader(GL_VERTEX_SHADER,
                                          "PTEX_DEBUG_VERTEX_SHADER");
    GLuint fragmentShader = compileShader(GL_FRAGMENT_SHADER,
                                          "PTEX_DEBUG_FRAGMENT_SHADER");

    g_debugProgram = glCreateProgram();
    glAttachShader(g_debugProgram, vertexShader);
    glAttachShader(g_debugProgram, fragmentShader);
    glLinkProgram(g_debugProgram);
    glDeleteShader(fragmentShader);

    GLint status;
    glGetProgramiv(g_debugProgram, GL_LINK_STATUS, &status );
    if( status == GL_FALSE ) {
        GLchar emsg[1024];
        glGetProgramInfoLog(g_debugProgram, sizeof(emsg), 0, emsg);
        fprintf(stderr, "Error linking GLSL program : %s\n", emsg );
        exit(0);
    }

    GLint texData = glGetUniformLocation(g_debugProgram, "ptexDebugData");
    glProgramUniform1i(g_debugProgram, texData, 0);
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D_ARRAY, g_osdPTexImage->GetTexelsTexture());
}
开发者ID:mbdriscoll,项目名称:OpenSubdiv,代码行数:30,代码来源:viewer.cpp


示例18: init

void init(Data*data){

  if(data->args.size()<2){
    std::cerr<<"expected name of video"<<std::endl;
    std::exit(0);
  }
  data->video = std::make_shared<Video>(data->args[1]);

  data->window->setSize(data->video->getWidth(),data->video->getHeight());


  glEnable(GL_DEBUG_OUTPUT);
  glDebugMessageCallback((GLDEBUGPROC)defaultDebugMessage,NULL);

  glViewport(0,0,data->video->getWidth(),data->video->getHeight());

  data->frame = std::make_shared<TextureObject>();
  data->program = std::make_shared<ProgramObject>(createProgram(
        compileShader(GL_VERTEX_SHADER  ,
          "#version 450\n",
          loadFile("shaders/video_gray.vp")),
        compileShader(GL_FRAGMENT_SHADER,
          "#version 450\n",
          loadFile("shaders/noiseFunctions.vp"),
          loadFile("shaders/gradients.vp"),
          loadFile("shaders/video_gray.fp"))));

  glGenVertexArrays(1,&data->vao);

  glClearColor(0,0,0,1);
}
开发者ID:dormon,项目名称:fit_opengl_examples,代码行数:31,代码来源:video_gray.cpp


示例19: glGetBooleanv

bool GLProgram::initWithByteArrays(const GLchar* vShaderByteArray, const GLchar* fShaderByteArray)
{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
    GLboolean hasCompiler = false;
    glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler);
    _hasShaderCompiler = (hasCompiler == GL_TRUE);

    if(!_hasShaderCompiler)
    {
        return initWithPrecompiledProgramByteArray(vShaderByteArray,fShaderByteArray);
    }
#endif

    _program = glCreateProgram();
    CHECK_GL_ERROR_DEBUG();

    _vertShader = _fragShader = 0;

    if (vShaderByteArray)
    {
        if (!compileShader(&_vertShader, GL_VERTEX_SHADER, vShaderByteArray))
        {
            CCLOG("cocos2d: ERROR: Failed to compile vertex shader");
            return false;
       }
    }

    // Create and compile fragment shader
    if (fShaderByteArray)
    {
        if (!compileShader(&_fragShader, GL_FRAGMENT_SHADER, fShaderByteArray))
        {
            CCLOG("cocos2d: ERROR: Failed to compile fragment shader");
            return false;
        }
    }

    if (_vertShader)
    {
        glAttachShader(_program, _vertShader);
    }
    CHECK_GL_ERROR_DEBUG();

    if (_fragShader)
    {
        glAttachShader(_program, _fragShader);
    }
    
    _hashForUniforms.clear();
    
    CHECK_GL_ERROR_DEBUG();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || defined(WP8_SHADER_COMPILER)
    _shaderId = CCPrecompiledShaders::getInstance()->addShaders(vShaderByteArray, fShaderByteArray);
#endif

    return true;
}
开发者ID:980538137,项目名称:MyGame-QuickCocos2dx,代码行数:59,代码来源:CCGLProgram.cpp


示例20: sprintf

Renderer::Renderer(const char *rootDirectory) {
    char file[200];
    // create color program
    string src;
    sprintf(file, "%s/shader/color.vertexshader", rootDirectory);
    loadShaderCodeFromFile(file, src);
    compileShader(src, GL_VERTEX_SHADER, shader["color_vertex"]);

    sprintf(file, "%s/shader/color.fragmentshader", rootDirectory);
    loadShaderCodeFromFile(file, src);
    compileShader(src, GL_FRAGMENT_SHADER, shader["color_fragment"]);

    if (createRenderProgram(shader["color_vertex"], shader["color_fragment"], program["color"]) == GL_FALSE)
        return;

    MatrixID = glGetUniformLocation(program["color"], "MVP");
    ViewMatrixID = glGetUniformLocation(program["color"], "ViewMatrix");
    ModelMatrixID= glGetUniformLocation(program["color"], "ModelMatrix");
    LightPositionID = glGetUniformLocation(program["color"], "LightPosition_worldspace");

    Mat cameraMatrix, distCoeffs;
    sprintf(file, "%s/intrinsics.xml", rootDirectory);
    cv::FileStorage fs(file, cv::FileStorage::READ);
    fs["camera_matrix"] >> cameraMatrix;
    fs["distortion_coefficients"] >> distCoeffs;
    fs.release();

    // calculate undistortion mapping
    Mat img_rectified, map1, map2;
    initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),
                            getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, cv::Size(WIDTH, HEIGHT), 1,
                                                      cv::Size(WIDTH, HEIGHT), 0),
                            cv::Size(WIDTH, HEIGHT), CV_16SC2, map1, map2);

    ViewMatrix = Matrix4f::Identity();
    ViewMatrix.topRightCorner(3,1) << 0,0,-2;

    float n = 0.01; // near field
    float f = 100; // far field
    ProjectionMatrix << cameraMatrix.at<double>(0, 0) / cameraMatrix.at<double>(0, 2), 0.0, 0.0, 0.0,
            0.0, cameraMatrix.at<double>(1, 1) / cameraMatrix.at<double>(1, 2), 0.0, 0.0,
            0.0, 0.0, -(f + n) / (f - n), (-2.0f * f * n) / (f - n),
            0.0, 0.0, -1.0, 0.0;
    K << cameraMatrix.at<double>(0, 0), cameraMatrix.at<double>(0, 1), cameraMatrix.at<double>(0, 2),
            cameraMatrix.at<double>(1, 0), cameraMatrix.at<double>(1, 1), cameraMatrix.at<double>(1, 2),
            cameraMatrix.at<double>(2, 0), cameraMatrix.at<double>(2, 1), cameraMatrix.at<double>(2, 2);
    cout << "K\n" << K << endl;
    Kinv = K.inverse();

    // background ccolor
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    // Enable depth test
    glEnable(GL_DEPTH_TEST);
    // Accept fragment if it closer to the camera than the former one
    glDepthFunc(GL_LESS);
    // Cull triangles which normal is not towards the camera
    glEnable(GL_CULL_FACE);
}
开发者ID:Roboy,项目名称:omgl,代码行数:58,代码来源:renderer.cpp



注:本文中的compileShader函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ compile_shader函数代码示例发布时间:2022-05-30
下一篇:
C++ compileOpCallSlowCase函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap