Chciałem wyrenderować trójkąt przy pomocy biblioteki OpenGL jednak tylko "czyści" mi okno, a nic nie renderuje ;/ Mimo iż wszystko zrobiłem jak w książce, oto kod:

To funkcja do zainicjowania biblioteki:

PIXELFORMATDESCRIPTOR pfd;    // pixel format descriptor structure

	pfd =				// pfd Tells Windows How We Want Things To Be
	{
		sizeof(PIXELFORMATDESCRIPTOR),				// Size Of This Pixel Format Descriptor
		1,											// Version Number
		PFD_DRAW_TO_WINDOW |						// Format Must Support Window
		PFD_SUPPORT_OPENGL |						// Format Must Support OpenGL
		PFD_DOUBLEBUFFER,							// Must Support Double Buffering
		PFD_TYPE_RGBA,								// Request An RGBA Format
		32,										    // Select Our Color Depth
		0, 0, 0, 0, 0, 0,							// Color Bits Ignored
		0,											// No Alpha Buffer
		0,											// Shift Bit Ignored
		0,											// No Accumulation Buffer
		0, 0, 0, 0,									// Accumulation Bits Ignored
		16,											// 16Bit Z-Buffer (Depth Buffer)  
		0,											// No Stencil Buffer
		0,											// No Auxiliary Buffer
		PFD_MAIN_PLANE,								// Main Drawing Layer
		0,											// Reserved
		0, 0, 0										// Layer Masks Ignored
	};

	hUchwytKontekstu =  GetDC(hUchwytOkna);
	GLuint PixelFormat = ChoosePixelFormat(hUchwytKontekstu, &pfd);
	SetPixelFormat(hUchwytKontekstu, PixelFormat, &pfd);
	hUchwytRendera = wglCreateContext(hUchwytKontekstu);
	wglMakeCurrent(hUchwytKontekstu, hUchwytRendera);

	if (glewInit())
		MessageBox(0, L"Brak mozliwosci zainicjowania glew!", L"Error", MB_ICONERROR);

	glGenVertexArrays(1, &VAO);
	glBindVertexArray(VAO);

	glViewport(0, 0, 400, 400);
	glClearColor(1, 0, 0, 1);
	glEnable(GL_TEXTURE_2D);
	ShaderProgram = ZaladujShader("vertex.vers", "fragment.fras");
	Uniform_macierz_transf = glGetUniformLocation(ShaderProgram, "mvp");
	Attribute_polozenie_wierz = glGetAttribLocation(ShaderProgram, "textureposition");
	static const GLfloat g_vertex_buffer_data[] = {
		-50.0, 50.0, 0.0f,
		-50.0, 0.0f, 0.0f,
		50.0f, 0.0f, 0.0f,

		50.0, 50.0, 0.0f,
		-50.0, 50.0f, 0.0f,
		50.0f, 0.0f, 0.0f,

		-50.0, 50.0, 0.0f,
		-50.0, 0.0f, 0.0f,
		50.0f, 0.0f, 0.0f,
	};


	glGenBuffers(1, &nBuffor1);
	glBindBuffer(GL_ARRAY_BUFFER, nBuffor1);
	glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
	
	macierzmvp = glm::mat4(1.0f);
	macierzmvp = glm::ortho(-200.0, 200.0, -200.0, 200.0);
	wglMakeCurrent(NULL, NULL); 

A tutaj do wyrenderowania trójkąta:

 wglMakeCurrent(hUchwytKontekstu, hUchwytRendera);
	glUseProgram(ShaderProgram);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glUniformMatrix4fv(Uniform_macierz_transf, 0, FALSE, &macierzmvp[0][0]);
	// 1rst attribute buffer : vertices
	glEnableVertexAttribArray(Attribute_polozenie_wierz);
	glBindBuffer(GL_ARRAY_BUFFER, nBuffor1);
	glVertexAttribPointer(
		0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
		3,                  // size
		GL_FLOAT,           // type
		GL_FALSE,           // normalized?
		0,                  // stride
		(void*)0            // array buffer offset
		);

	// Draw the triangle !
	glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle

	glDisableVertexAttribArray(Attribute_polozenie_wierz);

	SwapBuffers(hUchwytKontekstu);
	wglMakeCurrent(NULL, NULL);

Podstawowy shader wierzchołków:

 #version 120

attribute vec3 vertexposition;
uniform mat4 mvp;

mat4 mac;

void main()
{
	gl_Position = mvp * vec4(vertexposition.xy, 0, 1);
}

I fragmentów:

 #version 120

void main()
{
    gl_FragColor = vec4(1, 1, 1, 1);
}

Sprawdziłem chyba wszystkie możliwości i nadal nic tylko czyści mi na czerwono okno i nie widzę żadnego trójkąta :(