示例#1
0
    GLuint createProgramFromFiles(const char* vertShaderPath, const char* fragShaderPath, size_t definesCount, const char** defines)
    {
        GLuint program = glCreateProgram();

        if (vertShaderPath)
        {
            GLuint vertShader = createShaderFromFile(GL_VERTEX_SHADER, vertShaderPath, definesCount, defines);
            glAttachShader(program, vertShader);
            glDeleteShader(vertShader);
        }

        if (fragShaderPath)
        {
            GLuint fragShader = createShaderFromFile(GL_FRAGMENT_SHADER, fragShaderPath, definesCount, defines);
            glAttachShader(program, fragShader);
            glDeleteShader(fragShader);
        }

        glLinkProgram(program);

        const size_t	LOG_STR_LEN = 1024;
        char			infoLog[LOG_STR_LEN] = {0};
        GLsizei			length;
        glGetProgramInfoLog(program, LOG_STR_LEN-1, &length, infoLog);
        infoLog[length] = 0;

        if (infoLog[0])
        {
            logging::message("%s\n", infoLog);
        }

        return program;
    }
示例#2
0
int init()
{
  // Place one-time initialization code here

  // load model
  model = loadModel("../models/various/teapot.obj");
  setModelCenter(model, 0.f, 0.f, 0.f);
  setModelRadius(model, 0.3f);

  // Create vertex shader
  GLuint vertexShader = createShaderFromFile(GL_VERTEX_SHADER, "lab3-6.vs");
  if (!vertexShader)
    return 0;

  // Create fragment shader
  GLuint fragmentShader = createShaderFromFile(GL_FRAGMENT_SHADER, "lab3-6.fs"); 
  if (!fragmentShader)
    return 0;

  // Create shader program
  shaderProgram = createShaderProgram(vertexShader, fragmentShader);
  if (!shaderProgram)
    return 0;

  shaderTimeLocation = getUniformLocation(shaderProgram, "time");
  return 1;
}