Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Opengl 将gluScaleImage替换为缩放纹理四边形:但纹理未渲染_Opengl_Scale_Textures - Fatal编程技术网

Opengl 将gluScaleImage替换为缩放纹理四边形:但纹理未渲染

Opengl 将gluScaleImage替换为缩放纹理四边形:但纹理未渲染,opengl,scale,textures,Opengl,Scale,Textures,我试图在不使用gluScaleImage函数的情况下缩放图像,该函数太长(并且无法在项目中包含“glh”lib(使用glhScaleImage))。 我读到: 如果这只是关于显示不同大小的图像,为什么不创建一个带纹理的四边形和 将其缩放到要求的大小?纹理可以始终保持相同的大小 这就是我尝试使用以下代码所做的: 结果是,我看到红色的“BACK”写得很好,但没有看到“before glflush”,背景有一种奇怪的颜色(有时是紫色,有时是绿色(关于绿色问题,我怀疑这是图形卡的错误初始化)) =>谁能

我试图在不使用gluScaleImage函数的情况下缩放图像,该函数太长(并且无法在项目中包含“glh”lib(使用glhScaleImage))。 我读到:

如果这只是关于显示不同大小的图像,为什么不创建一个带纹理的四边形和 将其缩放到要求的大小?纹理可以始终保持相同的大小

这就是我尝试使用以下代码所做的: 结果是,我看到红色的“BACK”写得很好,但没有看到“before glflush”,背景有一种奇怪的颜色(有时是紫色,有时是绿色(关于绿色问题,我怀疑这是图形卡的错误初始化)) =>谁能告诉我用glReadPixels获得的缓冲区纹理有什么问题? =>或者有其他解决方案吗? (与其他解决方案(帧缓冲区,…)相比,我更希望更正此代码)

好的,我找到了错误(使用
glGetError()
):
GL\u BGRA
不存在
因此,我将其替换为
GL_RGBA
,并将我的纹理很好地绑定到四边形
GL_RGBA8
不工作)
我仍然有一个绿色污染问题,但这一定是另一个问题:框架初始化YUV

// ---
glColor4ub(255,0,0,200);
myPrintingFunction(200,200,"before glFlush");   
glFlush();

// Unload Bytes
if (mBuffer != NULL)
{
    delete[] mBuffer;
    mBuffer = NULL;
}

// Load Bytes from current window
mBuffer = new GLubyte[ClientWidth * ClientHeight * 4];
glReadBuffer(GL_BACK);
glReadPixels(0, 0, ClientWidth, ClientHeight, GL_BGRA, GL_UNSIGNED_BYTE, mBuffer);

SwapBuffers(ghDC);    

// Unload TextureId
if (mTextureId != 0)
{
    glDeleteTextures(1, &mTextureId);
    mTextureId = 0;
}

// Load TextureId
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &mTextureId);
glBindTexture(GL_TEXTURE_2D, mTextureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, ClientWidth, ClientHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, mBuffer);

// ---
glViewport(-mBufferWidth, -mBufferHeight, mBufferWidth * 2, mBufferHeight * 2);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(double(-mBufferWidth), double(mBufferWidth), double(-mBufferHeight), double(mBufferHeight), 1000.0, 100000.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0.0, 0.0, -50000.0);

glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, mTextureId);
mxIncrust0 = 0.0;
myIncrust0 = 0.0;
mxIncrust1 = mBufferWidth;
myIncrust1 = mBufferHeight;
glBegin(GL_QUADS);
    glColor4ub((unsigned char)255,(unsigned char)255,(unsigned char)255,(unsigned char)255);
    glTexCoord2d(0.0, 0.0);
    glVertex2d(mxIncrust0, myIncrust0);
    glTexCoord2d(0.0, 1.0);
    glVertex2d(mxIncrust0, myIncrust1);
    glTexCoord2d(1.0,1.0);
    glVertex2d(mxIncrust1, myIncrust1);
    glTexCoord2d(1.0,0.0);
    glVertex2d(mxIncrust1, myIncrust0);
glEnd();

glDisable(GL_TEXTURE_2D);  

glColor4ub(255,0,0,200);
myPrintingFunction(100,100,"BACK");                                        

glFlush();

if (mBufferPlayout != NULL)
{
    delete[] mBufferPlayout;
    mBufferPlayout = NULL;
}
mBufferPlayout = new GLubyte [mBufferWidth * mBufferHeight * 4];

glReadBuffer(GL_BACK);
glReadPixels(0, 0, mBufferWidth, mBufferHeight, GL_BGRA, GL_UNSIGNED_BYTE, mBufferPlayout);

// then I pass this mBufferPlayout to a graphic card (capture card in output in fact)