BGFX ignore shader

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

Answers (1)

For some strange reason first bgfx_encoder_submit call ignore passed shader program, subsequent calls use provided shaders as expected

Upvotes: 0

Related Questions