Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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++ 打电话后失去这个_C++_Xcode_Opengl - Fatal编程技术网

C++ 打电话后失去这个

C++ 打电话后失去这个,c++,xcode,opengl,C++,Xcode,Opengl,我在纹理/图像中存储了不同的信息。我想把它们渲染到FBO纹理上,然后用glReadPixels读取它们。 整个图像被分割成不同的区域,我在这个图像中有4行4列的信息,我想把它们存储在不同的指针上 std::vector<float*> data; for (int i = 0; i < _resolution; ++i) { int posX = mod((float)i, (float)sqrt(_resolution)); posX *= _resolut

我在纹理/图像中存储了不同的信息。我想把它们渲染到FBO纹理上,然后用glReadPixels读取它们。 整个图像被分割成不同的区域,我在这个图像中有4行4列的信息,我想把它们存储在不同的指针上

std::vector<float*> data;

for (int i = 0; i < _resolution; ++i) {
    int posX = mod((float)i, (float)sqrt(_resolution));
    posX *= _resolution;
    int posY = ((float)i / _resolution);
    posY *= _resolution;

    float pixels[_resolution*_resolution*3];
    glReadPixels(posX, posY, posX + _resolution, posY + _resolution, GL_RGB, GL_FLOAT, pixels);

    for (int j = 0; j < _resolution*_resolution; ++j) {
        cout << "(" << pixels[j*3] << ", " << pixels[j*3+1] << ", " << pixels[j*3+2] << ")";
    }
    cout << endl;

    data.push_back(pixels);

}
std::矢量数据;
对于(int i=0;i<_分辨率;++i){
int posX=mod((浮点)i,(浮点)sqrt(_分辨率));
posX*=\u分辨率;
int posY=((浮点)i/_分辨率);
posY*=\u分辨率;
浮动像素[_分辨率*_分辨率*3];
glReadPixels(posX、posY、posX+\u分辨率、posY+\u分辨率、GL\u RGB、GL\u浮点、像素);
对于(int j=0;j<\u分辨率*\u分辨率;++j){
库特
glReadPixel的第二个和第三个参数是宽度和高度,而不是右上角坐标(正如您的代码所假设的)。其结果是,您分配的缓冲区对于glReadPixel返回的数据量来说太小,导致缓冲区溢出

假设glReadPixels的参数正确,则应分配更大的缓冲区:

float pixels[(posX+_resolution)*(posy+_resolution)*3];
或者改为更正对glReadPixels本身的调用:

glReadPixels(posX, posY, _resolution, _resolution, GL_RGB, GL_FLOAT, pixels);
glReadPixel的第二个和第三个参数是宽度和高度,而不是右上角坐标(正如您的代码所假设的)。其结果是,您分配的缓冲区对于glReadPixel返回的数据量来说太小,导致缓冲区溢出

假设glReadPixels的参数正确,则应分配更大的缓冲区:

float pixels[(posX+_resolution)*(posy+_resolution)*3];
或者改为更正对glReadPixels本身的调用:

glReadPixels(posX, posY, _resolution, _resolution, GL_RGB, GL_FLOAT, pixels);

是的,我想是右上角有意义。谢谢是的,我想是右上角有意义。谢谢