Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opengl显示白盒而不是纹理_C++_Opengl_Textures_Glfw_Soil - Fatal编程技术网

C++ opengl显示白盒而不是纹理

C++ opengl显示白盒而不是纹理,c++,opengl,textures,glfw,soil,C++,Opengl,Textures,Glfw,Soil,我有一个纹理,我正在使用以下方法显示该纹理: glEnable (GL_BLEND); glEnable(GL_TEXTURE_2D); glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR); glGenTextures(1, tex); glBindTexture (GL_TEXTURE_2D, *tex); glBegin (GL_QUADS); glTexCoor

我有一个纹理,我正在使用以下方法显示该纹理:

    glEnable (GL_BLEND);
glEnable(GL_TEXTURE_2D);
        glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
        glGenTextures(1, tex);
    glBindTexture (GL_TEXTURE_2D, *tex);
        glBegin (GL_QUADS);
        glTexCoord2f (tx, ty);
        glVertex2f (sx, sy);
        glTexCoord2f (tw, ty);
        glVertex2f (sx + sxmax, sy);
        glTexCoord2f (tw, th);
         glVertex2f (sx + sxmax, sy + symax);
        glTexCoord2f (tx, th);
       glVertex2f (sx, sy + symax);
        glEnd();
        glDisable (GL_TEXTURE_2D);
        glDisable (GL_BLEND);
    GLuint GetTexture(string Filename)
    {
        GLuint tex_ID;

        tex_ID = SOIL_load_OGL_texture(
                     Filename.c_str(),
                     SOIL_LOAD_AUTO,
                     SOIL_CREATE_NEW_ID,
                     SOIL_FLAG_POWER_OF_TWO
                     | SOIL_FLAG_MIPMAPS
                     | SOIL_FLAG_MULTIPLY_ALPHA
                     | SOIL_FLAG_COMPRESS_TO_DXT
                     | SOIL_FLAG_DDS_LOAD_DIRECT
                     | SOIL_FLAG_INVERT_Y
                 );

        if( tex_ID > 0 )
        {

            glEnable( GL_TEXTURE_2D );

            glBindTexture( GL_TEXTURE_2D, tex_ID );

            return tex_ID;
        }
        else
        {
            cout<<"Texture failed to load"<<SOIL_last_result()<<Filename<<endl;
            return 0;
        }
    }
我正在使用以下命令加载纹理:

    glEnable (GL_BLEND);
glEnable(GL_TEXTURE_2D);
        glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
        glGenTextures(1, tex);
    glBindTexture (GL_TEXTURE_2D, *tex);
        glBegin (GL_QUADS);
        glTexCoord2f (tx, ty);
        glVertex2f (sx, sy);
        glTexCoord2f (tw, ty);
        glVertex2f (sx + sxmax, sy);
        glTexCoord2f (tw, th);
         glVertex2f (sx + sxmax, sy + symax);
        glTexCoord2f (tx, th);
       glVertex2f (sx, sy + symax);
        glEnd();
        glDisable (GL_TEXTURE_2D);
        glDisable (GL_BLEND);
    GLuint GetTexture(string Filename)
    {
        GLuint tex_ID;

        tex_ID = SOIL_load_OGL_texture(
                     Filename.c_str(),
                     SOIL_LOAD_AUTO,
                     SOIL_CREATE_NEW_ID,
                     SOIL_FLAG_POWER_OF_TWO
                     | SOIL_FLAG_MIPMAPS
                     | SOIL_FLAG_MULTIPLY_ALPHA
                     | SOIL_FLAG_COMPRESS_TO_DXT
                     | SOIL_FLAG_DDS_LOAD_DIRECT
                     | SOIL_FLAG_INVERT_Y
                 );

        if( tex_ID > 0 )
        {

            glEnable( GL_TEXTURE_2D );

            glBindTexture( GL_TEXTURE_2D, tex_ID );

            return tex_ID;
        }
        else
        {
            cout<<"Texture failed to load"<<SOIL_last_result()<<Filename<<endl;
            return 0;
        }
    }
是的。此外,每当我运行
glColor3f()对于某些值,屏幕上不显示任何内容。
我做错了什么

我正在使用glfw和SOIL加载/显示纹理

glEnable (GL_BLEND);
glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
glGenTextures(1, tex);
^^^^^^^^^^^^^^^^^^^^^ I hope tex didn't have anything important in it...
glBindTexture (GL_TEXTURE_2D, *tex);
glBegin (GL_QUADS);
....
每帧生成一个全新的空纹理。这也恰好是

生成一次纹理并使用它

每帧生成一个全新的空纹理。这也恰好是


生成一个纹理并使用它。

尝试执行小步骤:首先加载纹理并尝试渲染它(不启用混合),然后添加混合。使用以下标志加载纹理:SOIL_FLAG_INVERT_Y(仅一个标志,仅用于测试)。如果你有工作纹理,然后尝试添加混合…你有没有在第一帧后重新启用glEnable(GL_texture_2D)
?第一个代码块中的
tex
类型是什么?是的,我重新启用了GL_texture_2D,只是在复制粘贴中遗漏了它,tex声明如下:GLuint*tex;您知道tex的非零值实际上并不表示它是否“正确加载”了吗?这表明的唯一一件事是OpenGL为您生成了一个对象句柄(名称),该句柄不一定有与其关联的数据存储。事实上,在旧的实现中,OpenGL甚至不知道生成的句柄应该表示什么,直到您实际调用
glTexImage2D(…)
或尝试绑定它——您实际上可以调用
glGenTextures(…)
然后如果需要,将该句柄用作VBO:p尝试执行小步骤:首先加载纹理并尝试渲染它(不启用混合),然后添加混合。使用以下标志加载纹理:SOIL_FLAG_INVERT_Y(仅一个标志,仅用于测试)。如果你有工作纹理,然后尝试添加混合…你有没有在第一帧后重新启用glEnable(GL_texture_2D)?第一个代码块中的
tex
类型是什么?是的,我重新启用了GL_texture_2D,只是在复制粘贴中遗漏了它,tex声明如下:GLuint*tex;您知道tex的非零值实际上并不表示它是否“正确加载”了吗?这表明的唯一一件事是OpenGL为您生成了一个对象句柄(名称),该句柄不一定有与其关联的数据存储。事实上,在较旧的实现中,OpenGL甚至不知道生成的句柄应该表示什么,直到您实际调用
glTexImage2D(…)
或尝试绑定它——您可以实际调用
glGenTextures(…)
,然后如果需要,将该句柄用作VBO:P