我想要一个简单的三角形纹理,但屏幕上没有图像。 通过使用另一个使用颜色缓冲区颜色的着色器,它可以正常工作。 我在将它传递给gl之前检查了bmp图像的内容。 这是加载和传递纹理到gl
的部分uv 0,0 / 1,0 / 0.5,1.0
bmp_s = Load_BMP( tex_file );
glActiveTexture( GL_TEXTURE0 );
glGenTextures( 1, &tex_buf->texture ); // Create the buffer id
glBindTexture( GL_TEXTURE_2D, tex_buf->texture ); // bind it
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, bmp_s->width, bmp_s->height, 0, GL_BGR, GL_UNSIGNED_BYTE, bmp_s->img );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
glGenerateMipmap( GL_TEXTURE_2D );
这是绘图循环
do
{
Process_Input_Events(); // get mouse & kb -- calc mvp / view matrix
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
_uid_mvp = glGetUniformLocation( __sh_list[ 3 ].prg_id, "mvp_mx" );
_uid_tex_sampler = glGetUniformLocation( __sh_list[ 3 ].prg_id, "tex_sampler" );
glUseProgram( sh_s->prg_id ); // use the shader
glUniformMatrix4fv( _uid_mvp, 1, GL_FALSE, &_sys.mvp_mx[ 0 ][ 0 ] ); // send mvp
glBindVertexArray( vao->id ); // bind vao
glActiveTexture( GL_TEXTURE0 );
glBindTexture( GL_TEXTURE_2D, vao->tex_buf->texture );
glUniform1i( _uid_tex_sampler, 0 );
glDrawArrays( vao->prim, 0, vao->vx_b->numb );
glBindVertexArray( 0 ); // unbind vao
glUseProgram( 0 ); // unbind shader
} while( condition );
以下是着色器
#version 450 core
layout( location = 0 ) in vec3 vx; // the vertex_buffer in modelspace
layout( location = 3 ) in vec2 uv_in; // uv coordiantes for each vertex
out vec2 uv;
uniform mat4 mvp_mx;
void main()
{
gl_Position = mvp_mx * vec4( vx, 1.0f );
uv = uv_in;
}
#version 450 core
in vec2 uv; // interpolated values from vertex shader
out vec3 out_color;
uniform sampler2D tex_sampler; // Index of opengl texture
void main()
{
out_color = texture( tex_sampler, uv ).rgb;
}
任何帮助将不胜感激