在OpenGL中使用多个纹理GLFW / GLAD

问题描述

我正在开发一个OpenGL项目,目前基本上只是2D绘画。您可以从画布中添加/删除“块”,并执行其他一些基本操作。我正在尝试实现多个纹理,并且很难做到这一点。需要明确的是,我不需要多个着色器,只需使用不同的纹理即可。这是我的Block类的样子:

#pragma once

#include "shader_s.h"


class Texture {
    Shader* shader;
    unsigned char *data;
    int width,height,nrChannels;

    //Shader shader;


public:
    Texture(char* image) {
        shader = new Shader("shader.vs","shader.fs");



        unsigned int texture1;

        glGenTextures(1,&texture1);
        glBindTexture(GL_TEXTURE_2D,texture1);

        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

        
        stbi_set_flip_vertically_on_load(true);
        data = stbi_load(image,&width,&height,&nrChannels,0);
        if (data)
        {
            glTexImage2D(GL_TEXTURE_2D,GL_RGB,width,GL_UNSIGNED_BYTE,data);
            glGenerateMipmap(GL_TEXTURE_2D);
        }
        else
        {
            std::cout << "Failed to load texture" << std::endl;
        }
        stbi_image_free(data);




        shader->setInt("texture1",0);


    }


public:
    Shader getShader() {
        return *shader;
    }

public:
    void use() {
        shader->use();
        
    }
};

this是shader_s标头来自(learnopengl)的地方。

基本上,主要问题是构造函数中有关OpenGL内容的代码被下一个纹理覆盖(我认为这就是问题)。结果是除最后创建的所有纹理类外,所有其他纹理类均被忽略。我不知道如何解决此问题,因为我不确定100%是否所有OpenGL函数都可以。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...