BGFX忽略着色器

fdx2calv  于 2022-10-18  发布在  其他
关注(0)|答案(1)|浏览(301)

我正在尝试使用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

ujv3wf0j

ujv3wf0j1#

出于某种奇怪的原因,第一个bgfx_encoder_mit调用忽略传递的着色器程序,随后的调用如预期那样使用提供的着色器

相关问题