我創建了一個基本着色器程序來刷新我的openGL GLSL。OpenGL着色器程序奇怪的結果
CPU側我已經正確創建我的着色器程序.vp和.fp鏈接正確和錯誤校驗
我的結果,當我渲染始終是一個黑色的三角
之前,我聯繫我的計劃,但之後,我附上兩個着色器我這樣做
glBindAttribLocation(program, 0, "vVertexPos");
glBindAttribLocation(program, 1, "vColor");
我的兩個位置變量和我的顏色可變的着色器
所有日。是剛剛通過這樣的IM一個快速運行並不擔心除了openGL的醜陋的代碼調用和着色器設置
struct PosColVertex
{
float pos[3];
float color[4];
};
PosColVertex verts[3];
float vPos1[3] = { 0.5f, 0.0f, -1.0f };
float vPos2[3] = { 0.0f, 1.0f, -1.0f };
float vPos3[3] = { -0.5f, 0.0f, -1.0f };
memcpy(verts[0].pos, vPos1, sizeof(float)*3);
memcpy(verts[1].pos, vPos2, sizeof(float)*3);
memcpy(verts[2].pos, vPos3, sizeof(float)*3);
float vColor1[4] = { 1.0f, 0.0f, 0.0f, 1.0f };
float vColor2[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
float vColor3[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
memcpy(verts[0].color, vColor1, sizeof(float)*4);
memcpy(verts[1].color, vColor2, sizeof(float)*4);
memcpy(verts[2].color, vColor3, sizeof(float)*4);
glGenBuffers(1, &vboHandle);
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glBufferData(GL_ARRAY_BUFFER, sizeof(PosColVertex)*3, verts, GL_DYNAMIC_READ);
我的渲染,這是我做什麼
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//use our shader program
glUseProgram(program);
//set which vertices we will be using
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
//specify our vertex attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(PosColVertex), (void*)(0));
//specify our texture attribute
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(PosColVertex), (void*)(12));
glPushMatrix();
//draw our rectangle
glDrawArrays(GL_TRIANGLES, 0, 3);
glPopMatrix();
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
難道我錯了glVertexAttribPointer調用?我檢查了我的着色器的工作原理,它確實改變了這些值,因爲我之前在那裏硬編碼了數值,以便測試它。但即時通訊假設我不告訴openGL在CPU端如何正確閱讀我的垂直。任何幫助?
tri.vp
#version 330
in vec3 vVertexPos;
void main(void)
{
gl_Position = vec4(vVertexPos.x, vVertexPos.y, vVertexPos.z, 1);
}
tri.fp
#version 330
out vec4 vFragColor;
in vec4 vColor;
void main(void)
{
vFragColor = vColor;
}
這不是你的問題,但你爲什麼要使用'GL_DYNAMIC_READ'作爲緩衝區對象的用法?你打算將內存讀回CPU嗎?你打算更新內存嗎?如果不是,請使用'GL_STATIC_DRAW'。 –
更重要的是,你的着色器在哪裏? –
我調試了我的着色器它的工作原理:D.但如果你想看到它,我會添加它。我也使用GL_DYNAMIC_READ,因爲我有一個實際的項目im工作,我做這個示例項目只是調試的東西。所以是的,我做計劃搞亂數據那裏我保存它GL_DYNAMIC_READ –