Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
// 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);
}