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; }
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; }