我不知道如何为sizeof()和void指针取消引用该指针
|
我不知道如何取消引用此指针...
在下面这行中的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))
如果我注释掉有问题的行,并取消注释上面的行,它正在工作,但是我需要这种间接访问(实际上,我需要另一种级别的间接访问,可以在另一条注释掉的行中看到),但是如果我能弄清楚取消引用此行,我应该能够将它用于另一个间接级别?)
没有找到相关结果
已邀请:
1 个回复
可扇胆
是编译时常量,可在您提供的确切类型上使用。
中的
只是计算机上指针的大小(可能是4/8字节)。只需存储大小以及其他数据即可。