0

関数のスタックで宣言した 2 つの配列があり、両方にまったく同じデータが含まれていることを確認しました。

/// Rasters the textured quad using the specified parameters.
- (void)privateConfigureRasterWithTexture:(GLuint)theTexture
                          bottomLeftX:(GLfloat)bottomLeftX
                          bottomLeftY:(GLfloat)bottomLeftY
                            topRightX:(GLfloat)topRightX
                            topRightY:(GLfloat)topRightY
{

    const GLfloat texices[] =
      { bottomLeftX, bottomLeftY,   // bottom left corner
        bottomLeftX,   topRightY,   // top left corner
          topRightX,   topRightY,   // top right corner
          topRightX, bottomLeftY }; // bottom right corner

    const GLfloat texices2[] =
      { 0.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 1.0f,
        1.0f, 0.0f };

    for(int x=0;x<8;x++)
        if(texices[x] != texices2[x])
        {
            NSLog(@"Mismatch!");
            abort();
        }

その関数(の下部)で次のコード行を実行すると

glVertexAttribPointer(_attributeTexturedTexCoords, 2, GL_FLOAT, GL_FALSE,
                      2*sizeof(GLfloat), texices2);

期待される結果が得られますが、代わりに実行すると

glVertexAttribPointer(_attributeTexturedTexCoords, 2, GL_FLOAT, GL_FALSE,
                      2*sizeof(GLfloat), texices);

私は悪い結果を得る。違いがわかりません。

編集:これが私がこの関数を呼び出す方法です。

[self privateConfigureRasterWithTexture:_atlasTexture1
                            bottomLeftX:0.0f
                            bottomLeftY:0.0f
                              topRightX:1.0f
                              topRightY:1.0f];
4

1 に答える 1

0

気にしないでください、私はそれを見つけたと思います(おそらくMartinsが見つけたのとほぼ同じ時期に)。glVertexAttribPointerへの呼び出しまでデータのコピーを作成しないようですglDrawElements。myglDrawElementsはその関数の外にあるため、スタック メモリが解放されていました (ただし、何らかの理由でtexices2有効なままでした)。

コードを少し書き直して、texicesそのクラスが割り当てられたときにヒープが一度割り当てられ、アプリケーションが割り当てを解除したときに何度も再利用され、解放されるようにしました。

于 2012-11-20T07:24:32.367 に答える