[英]Random pieces of screen are being rendered opengl- what error does this indicate?
[英]OpenGL- triangle is not being displayed?
我正在從非常好的第6版學習opengl,我似乎無法從書中給出的下面的代碼中畫出三角形。
#include <iostream>
#include "externalErrorFix.h"
#include "sb6.h"
GLuint compile_shaders(void)
{
GLuint vertex_shader;
GLuint fragment_shader;
GLuint program;
//GLSL shader sources
static const GLchar *vertex_shader_source[] =
{
"#version 430 core \n"
" \n"
"void main(void) \n"
"{ \n"
" const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0), \n"
" vec4(-0.25, -0.25, 0.5, 1.0), \n"
" vec4(0.25, 0.25, 0.5, 1.0)); \n"
" \n"
" gl_postion = vertices[gl_VertexID]; \n"
"} \n"
};
static const GLchar *fragment_shader_source[] =
{
"#version 430 core \n"
" \n"
"out vec4 color; \n"
"void main(void) \n"
"{ \n"
" color = vec4(0.0, 1.0, 0.0, 1.0); \n"
"} \n"
};
//create and compile vertex shaders
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
glCompileShader(vertex_shader);
//create and compile fragment shader
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
glCompileShader(fragment_shader);
//create a program attach shaders and link it
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
return program;
}
class my_application : public sb6::application
{
private:
GLuint render_program;
GLuint vertex_array_object;
public:
void startup()
{
render_program = compile_shaders();
glGenVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
}
void shutdown()
{
glDeleteVertexArrays(1, &vertex_array_object);
glDeleteProgram(render_program);
glDeleteVertexArrays(1, &vertex_array_object);
}
void render(double currentTime)
{
const GLfloat color[] = { 0.0f,0.2f,0.0f,1.0f };
glClearBufferfv(GL_COLOR, 0, color);
glUseProgram(render_program);
glDrawArrays(GL_TRIANGLES, 0, 3);
//glPointSize(10.0f);
}
/*
// First program
void render(double currentTime)
{
const GLfloat color[] = {
(float)sin(currentTime) * 0.5f + 0.5f,
(float)cos(currentTime) * 0.5f + 0.5f,
0.0f,1.0f
};
glClearBufferfv(GL_COLOR, 0, color);
}*/
};
DECLARE_MAIN(my_application);
似乎有一些拼寫錯誤:
gl_postion
而不是gl_Position
out vec4 color
缺少分號out vec4 color;
glDeleteVertexArrays(1, &vertex_array_object);
在關機功能中出現兩次 此外,類my_application中缺少init()
函數。 它應該特別調用sb6::application::init()
。
如果仍然沒有幫助,看來,這本書保持與它的所有樣本庫在這里 。 也許他們會糾正那里的一切。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.