OpenGL: текстура не отображается на экране стартаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 OpenGL: текстура не отображается на экране старта

Сообщение Anonymous »

Я работаю над проектом OpenGL с двумя экранами: экраном старта и экраном игры. Каждый экран имеет свою собственную текстуру, настройку VAO/VBO и программу шейдеров. После запуска он переключается на игровой экран. Каждый экран активирует свой собственный шейдер, устанавливает униформу Sampler2D в правильный блок текстуры, затем активирует и связывает его текстуру перед рисунком. это пусто. Однако, если я полностью удаляю класс Gamescreen, текстура стартового экрана отображается правильно.Texture texture = Texture("menu_background.png", GL_TEXTURE_2D, GL_TEXTURE0, GL_RGBA, GL_UNSIGNED_BYTE);
< /code>
gamescreen текстура: < /p>
Texture texture = Texture("texture_atlas.png", GL_TEXTURE_2D, GL_TEXTURE1, GL_RGBA, GL_UNSIGNED_BYTE);
< /code>
void draw () of startscreen.h: < /p>
shader.activate();
glUniform1i(glGetUniformLocation(shader.id, "texture2"), 0); // Uses GL_TEXTURE0
texture.activate(GL_TEXTURE0);
texture.bind();
vao.bind();
ebo.bind();
glDrawElements(GL_TRIANGLES, ...);
< /code>
фрагментный шейдер startscreen: < /p>
#version 330 core
uniform sampler2D texture2;
void main() {
FragColor = texture(texture2, tex_coord);
}
< /code>
void draw () of gamescreen.h: < /p>
shader.activate();
glUniform1i(glGetUniformLocation(shader.id, "texture1"), 1); // Uses GL_TEXTURE1
texture.activate(GL_TEXTURE1);
texture.bind();
< /code>
Fragment Shader of Gamescreen.h: < /p>
#version 330 core
uniform sampler2D texture1;
void main() {
FragColor = texture(texture1, tex_coord);
}
< /code>
, а затем в main.cpp: < /p>
window_setting = { window, width, height, true };
StartScreen start_screen = StartScreen();
GameScreen game_screen = GameScreen(&window_setting);

while (!glfwWindowShouldClose(window)) {
process_inputs(window);

if (start_game) {
game_screen.draw();
}
else {
start_screen.draw(); //this is blank. but its music is played, so it means start screen is drawn
}
}
< /code>
Наконец, моя реализация текстуры: < /p>
Texture::Texture(const char* filename, GLenum texture_type, GLenum slot, GLenum format, GLenum pixel_type) {
type = texture_type;
glGenTextures(1, &id);
glActiveTexture(slot);
glBindTexture(texture_type, id);

int width, height, channels;
stbi_set_flip_vertically_on_load(true);
unsigned char* data = stbi_load(filename, &width, &height, &channels, 0);

if (data) {
glTexImage2D(texture_type, 0, GL_RGBA, width, height, 0, format, pixel_type, data);
glGenerateMipmap(texture_type);
}
else {
cout

Подробнее здесь: https://stackoverflow.com/questions/796 ... is-present
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»