私はスプライトクラスを設計しており、テクスチャがロードされていない場合は色のみを表示したいと思います。ここでsampler2Dが空であることを確認してください
は、私の頂点シェーダは
#version 330 core
layout (location = 0) in vec4 vertex; // <vec2 pos, vec2 tex>
out vec2 vs_tex_coords;
uniform mat4 model;
uniform mat4 projection;
void main()
{
vs_tex_coords = vertex.zw;
gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
}
とフラグメントシェーダです:
#version 330 core
in vec2 vs_tex_coords;
out vec4 fs_color;
uniform sampler2D image;
uniform vec3 sprite_color;
void main()
{
fs_color = vec4(sprite_color, 1.0) * texture(image, vs_tex_coords);
}
私の問題は、私はテクスチャを結合しない場合、それは黒のみのスプライトを表示するということです。問題は、私のフラグメントシェーダのテクスチャ関数が0を返し、すべての式をねじ込むということです。
sampler2Dが初期化されていないか、nullであるかどうかを知る方法はありますか?単にsprite_colorを返しますか?
SOLUTION:
ソリューションは、空の1x1のテクスチャを生成し、とにかくそれをバインドすることでした。これを行うには、RGBAの場合は4文字から255の配列を作成し、1x1のテクスチャが作成されるように1x1のサイズをglTexImage2D
関数に与える必要があります。
Texture::Texture()
{
glGenTextures(1, &ID);
GLubyte data[] = { 255, 255, 255, 255 };
glBindTexture(GL_TEXTURE_2D, ID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
size.x = 1;
size.y = 1;
}
希望する色で1x1テクスチャをバインドしますか? – genpfault