我正在尝试使用Java、LWJGL和bgfx编写一些游戏引擎,但着色器有问题。目前我使用的是OpenGL 2.1后台。
由于某种原因,bgfx回滚到默认着色器程序。我使用的是非常简单的着色器,并且使用shaderc编译时没有错误,但当我使用bgfx_encoder_submit(encoder, 0, program, 0, 0)
将其提供给编码器时,bgfx似乎完全忽略了它,就像我使用了bgfx_encoder_submit(encoder, (short) 0, program, 0, 0)
一样。我做错了什么?
以下是代码
顶点着色器
$input a_position, a_texcoord0
$output v_texcoord0
# include "../common/common.sh"
void main()
{
gl_Position = mul(u_modelViewProj, vec4(a_position, 1));
v_texcoord0 = a_texcoord0;
}
片段着色器
$input v_texcoord0
# include "../common/common.sh"
SAMPLER2D(s_texColor, 0);
void main()
{
vec4 color = texture2D(s_texColor, v_texcoord0);
gl_FragColor = color;
}
创建着色器程序
short vertexShader = loadShader(vertexShaderName);
short fragmentShader = loadShader(fragmentShaderName);
this.program = bgfx_create_program(vertexShader, fragmentShader, true);
渲染帧
long encoder = bgfx_encoder_begin(false);
bgfx_encoder_set_transform(encoder,
model.translation(position.x, position.y, position.z)
.rotateXYZ(rotation.x, rotation.y, rotation.z)
.get4x4(modelBuffer));
bgfx_encoder_set_vertex_buffer(encoder, 0, vertexBuffer, 0, vertexCount);
bgfx_encoder_set_index_buffer(encoder, indexBuffer, 0, indexCount);
bgfx_encoder_set_texture(encoder, 0, textureUniform, texture, 0xffffffff);
bgfx_encoder_set_state(encoder, BGFX_STATE_DEFAULT, 0);
bgfx_encoder_submit(encoder, 0, program, 0, 0);
bgfx_encoder_end(encoder);
结果
只需要没有颜色的纹理(请参见着色器),但实际上是具有红色的纹理,就像使用了默认程序一样。我试着修改着色器,但每次都得到相同的结果。screenshot
1条答案
按热度按时间ujv3wf0j1#
出于某种奇怪的原因,第一个bgfx_encoder_mit调用忽略传递的着色器程序,随后的调用如预期那样使用提供的着色器