Reputation: 1
I'm trying to code some game engine using Java, LWJGL and bgfx but have a problem with shaders. Currently I use OpenGL 2.1 backend.
For some reason bgfx rollbacks to the default shader program. I'm using very simple shader and it compiles without errors with shaderc, but when I supply it to the encoder with bgfx_encoder_submit(encoder, 0, program, 0, 0)
bgfx seems to ignore it completely, as if I used bgfx_encoder_submit(encoder, (short) 0, program, 0, 0)
.
What i'm doing wrong?
here's the code
vertex shader
$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;
}
fragment shader
$input v_texcoord0
#include "../common/common.sh"
SAMPLER2D(s_texColor, 0);
void main()
{
vec4 color = texture2D(s_texColor, v_texcoord0);
gl_FragColor = color;
}
creating shader program
short vertexShader = loadShader(vertexShaderName);
short fragmentShader = loadShader(fragmentShaderName);
this.program = bgfx_create_program(vertexShader, fragmentShader, true);
render frame
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);
result
expected just a texture without a color (see shader), but was a texture with a red color, as if default program was used. I tried to modify shader, but every time get the same result. screenshot
Upvotes: 0
Views: 243
Reputation: 1
For some strange reason first bgfx_encoder_submit call ignore passed shader program, subsequent calls use provided shaders as expected
Upvotes: 0