bool LinkShaderPrograms() { shVertex.LoadShader("shaders/VertexShader.glsl", GL_VERTEX_SHADER); shFragment.LoadShader("shaders/FragmentShader.glsl", GL_FRAGMENT_SHADER); shpMain.CreateProgram(); shpMain.AddShaderToProgram(&shVertex); shpMain.AddShaderToProgram(&shFragment); shpMain.LinkProgram(); if (!shpMain.LinkProgram()) { return false; } return true; }
void InitScene(LPVOID lpParam) { // clear rendering window glClearColor(0.0f, 0.0f, 0.0f, 0.0f); /////Load assets bind shaders here///// VBOScene.CreateVBO(); glGenVertexArrays(1, &uVAO); // Create one VAO glBindVertexArray(uVAO); VBOScene.BindVBO(); // Add cube to VBO for (int i = 0; i < 36; i++) { VBOScene.AddData(&vCubeVertices[i], sizeof(glm::vec3)); VBOScene.AddData(&vCubeTexCoords[i % 6], sizeof(glm::vec2)); } // Add pyramid to VBO for (int i = 0; i < 12; i++) { VBOScene.AddData(&vPyramidVertices[i], sizeof(glm::vec3)); VBOScene.AddData(&vPyramidTexCoords[i % 3], sizeof(glm::vec2)); } // Add ground to VBO for (int i = 0; i < 6; i++) { VBOScene.AddData(&vGround[i], sizeof(glm::vec3)); vCubeTexCoords[i] *= 5.0f; VBOScene.AddData(&vCubeTexCoords[i % 6], sizeof(glm::vec2)); } VBOScene.LoadDataToGPU(GL_STATIC_DRAW); // Vertex positions start on zero index, and distance between two consecutive is sizeof whole // vertex data (position and tex. coord) glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(glm::vec3) + sizeof(glm::vec2), 0); // Texture coordinates start right after positon, thus on (sizeof(glm::vec3)) index, // and distance between two consecutive is sizeof whole vertex data (position and tex. coord) glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(glm::vec3) + sizeof(glm::vec2), (void*)sizeof(glm::vec3)); // Load shaders and create shader program vShader.LoadShader("data\\Shaders\\scene.vert", GL_VERTEX_SHADER); fShader.LoadShader("data\\Shaders\\scene.frag", GL_FRAGMENT_SHADER); spShader.CreateShaderProgram(); spShader.AddShaderToProgram(&vShader); spShader.AddShaderToProgram(&fShader); spShader.LinkShader(); spShader.UseShaderProgram(); glEnable(GL_DEPTH_TEST); glClearDepth(1.0); // load texture tGold.LoadTexture2D("data\\Textures\\gold.jpg", true); tGold.SetFiltering(TEXTURE_FILTER_MAG_BILINEAR, TEXTURE_FILTER_MIN_BILINEAR_MIPMAP); tSnow.LoadTexture2D("data\\Textures\\snow.jpg", true); tSnow.SetFiltering(TEXTURE_FILTER_MAG_BILINEAR, TEXTURE_FILTER_MIN_BILINEAR_MIPMAP); glEnable(GL_TEXTURE_2D); }
// loads the vertex shader and fragment shader, and links them to make the global program static void LoadShaders() { std::vector<GLuint> shaders; shaders.push_back(shader.LoadShader("vertex.glsl", GL_VERTEX_SHADER)); shaders.push_back(shader.LoadShader("fragment.glsl", GL_FRAGMENT_SHADER)); program = new Program(shaders); }