0

このポインタを逆参照する方法がわかりませんでした...

以下のこの行のsizeof(shapetest2-> tripsName)は、ポインターであるため、明らかに機能しません。逆参照する方法がわかりませんでしたか?(それは簡単ですか?それともいくつかのステップですか?、私はいくつかのことを試しましたが、近づくことができませんでした)私はこの特定の状況を理解するのに十分な経験のあるコーダーではありません。

glBufferSubData(GL_ELEMENT_ARRAY_BUFFER、0、sizeof(shapetest2-> tripsName)、shapetest2-> tripsName);

これがセットアップコードです。(私はopenGL ES 1.5でVOBを実験しているので、奇妙に見える場合はそれが理由です)重要なセットアップや定義、またはコードを忘れた場合は、私に知らせてください。それを含めます。

GLsizeiptr dataSize;
GLsizeiptr indexSize;

typedef struct shapeBase {
    void *stripsName[maxStrips];
    void *tripsName;
    void *fansName;
    int   totStrips;
    int   stripsNum[maxStrips];
    int   tripsNum;
    int   totFans;
    int   fansBgn[maxStrips];
    int   fansNum[maxStrips];
    void *dataName;
    void *listOfInserts;
    Vertex3D center;
    Vertex3D radius;
    int   damageMax;
    float weight;
    GLuint bufferName;
    GLuint indexName;
} shapeBase;

static const GLushort test2Trips[] =
{
    0, 1, 3, 1, 2, 3,
    4, 5, 7, 5, 6, 7,
    8, 9, 11, 9, 10, 11,
    12, 13, 15, 13, 14, 15,
    16, 17, 19, 17, 18, 19,
    20, 21, 23, 21, 22, 23,
    24, 25, 27, 25, 26, 27,
    28, 29, 31, 29, 30, 31,
    32, 33, 35, 33, 34, 35,
    36, 37, 39, 37, 38, 39,
    40, 41, 43, 41, 42, 43,
    44, 45, 47, 45, 46, 47,
};

//-------------------------
static inline void shapetest2Setup(void)
{
    shapetest2 = malloc(sizeof(shapeBase));
    shapetest2->stripsName[1]   = NULL;
    shapetest2->tripsName       = &test2Trips;
    shapetest2->fansName        = NULL;
    shapetest2->dataName        = &test2Data;
    shapetest2->totStrips       = 0;
    shapetest2->stripsNum[1]    = 0;
    shapetest2->tripsNum        = 72;
    shapetest2->totFans     = 0;
    shapetest2->listOfInserts   = NULL;
    shapetest2->center      = Vertex3DMake( 0.000000, -0.000000, 2.000000 );
    shapetest2->radius      = Vertex3DMake( 1.000000, 1.000000, 2.000000 );

    dataSize = sizeof(test1Data) + sizeof(test2Data);

    glGenBuffers(1, &mainBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, mainBuffer);
    glBufferData(GL_ARRAY_BUFFER, dataSize, NULL, GL_STATIC_DRAW);

    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(test1Data), test1Data);
    glBufferSubData(GL_ARRAY_BUFFER, sizeof(test1Data), sizeof(test2Data), test2Data);

//  glGenBuffers(1, &shapetest2->indexName);
//  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, shapetest2->indexName);
//  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(test2Trips), test2Trips, GL_STATIC_DRAW);


    indexSize = sizeof(test1Trips) + sizeof(test2Trips);

    glGenBuffers(1, &mainIndex);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mainIndex);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexSize, NULL, GL_STATIC_DRAW);
}


//------------------------------------------------------
static inline void DrawOutShape(void)
{
    glBindBuffer(GL_ARRAY_BUFFER, mainBuffer);


    glVertexPointer(3, GL_FLOAT, sizeof(VertexData3D), (void*)0);
    glNormalPointer(GL_FLOAT, sizeof(VertexData3D), (void*)12);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mainIndex);

//  glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(theInsert->insertName->tripsName), theInsert->insertName->tripsName);

//  glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(test1Trips), test1Trips);
//  glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, sizeof(test1Trips), sizeof(test2Trips), shapetest2->tripsName);

    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(shapetest2->tripsName), shapetest2->tripsName);


         glDrawElements(GL_TRIANGLES, theInsert->insertName->tripsNum, GL_UNSIGNED_SHORT, (void*)0);


    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);


polys += theInsert->insertName->tripsNum;

}

(theInsertはshapetest2のハンドル(ポインターへのポインター)であるため、「theInsert-> insertName」が表示されている場合はshapetest2に置き換えることができます)

問題のある行をコメントアウトし、上の行のコメントを外すと、機能しますが、この間接参照が必要です(実際には、別のコメント化された行で確認できる別のレベルの間接参照が必要です)。この行を逆参照するには、別のレベルの間接参照でそれを実行できるはずですか?)

4

1 に答える 1

2

sizeof指定した正確な型で機能するコンパイル時定数です。sizeofofvoid*は、マシン上のポインタのサイズ(4/8バイトの可能性が高い)です。サイズを他のデータと一緒に保存するだけです。

于 2011-05-24T21:22:10.010 に答える