微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您认为这两个iOS设备的VBO设置中哪个更快?

如何解决您认为这两个iOS设备的VBO设置中哪个更快?

| 在我进行大量数据测试之前,我以为我会先选拔你的大脑, 您认为这两种针对iOS设备的vbo设置中哪个更快?在openGL-ES 1.x环境中。 设置一个空白的主GL_ELEMENT_ARRAY_BUFFER,然后使用运行循环中的glBufferSubData子填充当时需要的索引数据, 其他设置是先设置单个GL_ELEMENT_ARRAY_BUFFER,然后在运行循环中使用glBindBuffer。 (在两种情况下,\“ DrawOutShape \”下面都是运行循环中的唯一例程) 更新:为了让人们将来参考,我相信我已经在示例3中找到了做到这一点的最佳方法(如果有误,请更正)。 一个简单的问题:是否有更好的方法来做这行“((glushort *)(sizeof(glushort)* shapetest2-> deOffset)\” 更新2:供人们将来参考,在伪实例化中,如果您现在想在iOS中实例化,则无法在运行循环中设置数据(有很多块,然后旋转,缩放和放置)并且在运行循环结束时只有一个glDrawElements可以同时将它们全部拉出,然后再开始循环(不会使速度变差),每个\“ shape \”必须有一个glDrawElements ”。不幸的是,您的运行循环中。...我已经确定是openGL-ES还是将来版本的Apple,使它可以通过单个glDrawElements实例化,这可以使FPS大幅提高,例如5次。它是一堵砖墙,使ES迅速向海事组织前进。 范例1:
static const glushort test2Trips[] =
{
    24,25,27,26,28,29,31,30,32,33,35,34,36,37,39,38,40,41,43,42,44,45,47,46,48,49,51,50,52,53,55,54,56,57,59,58,60,61,63,62,64,65,67,66,68,69,71,70,};

//-------------------------
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 );
    shapetest2->indexSize       = sizeof(test2Trips);
    shapetest2->deOffset        = 24;

    dataSize  += sizeof(test2Data);
    if (sizeof(test2Trips) > indexSize) indexSize = sizeof(test2Trips);
}

// endOfShapetest2
//--------------------------------------------------------

//-------------------------
static inline void CreateVBOs(void)
{
    GLsizeiptr theDataSize = 0;

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

    glBufferSubData(GL_ARRAY_BUFFER,theDataSize,sizeof(test1Data),test1Data);
    theDataSize += sizeof(test1Data);
    glBufferSubData(GL_ARRAY_BUFFER,sizeof(test2Data),test2Data);

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


//------------------------------------------------------
static inline void DrawOutShape(void)
{
    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER,shapetest2->indexSize,shapetest2->tripsName);

    glDrawElements(GL_TRIANGLES,shapetest2->tripsNum,GL_UNSIGNED_SHORT,(void*)0);
}
范例2:
static const glushort test2Trips[] =
{
    24,2.000000 );
    shapetest2->indexSize       = sizeof(test2Trips);
    shapetest2->deOffset        = 24;

    dataSize  += sizeof(test2Data);
    if (sizeof(test2Trips) > indexSize) indexSize = sizeof(test2Trips);

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

// endOfShapetest2
//--------------------------------------------------------

//-------------------------
static inline void CreateVBOs(void)
{
    GLsizeiptr theDataSize = 0;

    glGenBuffers(1,test2Data);

}


//------------------------------------------------------
static inline void DrawOutShape(void)
{
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,shapetest2->indexName);

    glDrawElements(GL_TRIANGLES,(void*)0);
}
范例3:
static const glushort test1Trips[] =
{
    0,1,3,2,4,5,7,6,8,9,11,10,12,13,15,14,16,17,19,18,20,21,23,22,};

static const glushort test2Trips[] =
{
    24,};

 //-------------------------
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,2.000000 );
    shapetest2->indexSize       = sizeof(test2Trips);
    shapetest2->deOffset        = 24;

    dataSize  += sizeof(test2Data);
    indexSize += sizeof(test2Trips);

 }

// endOfShapetest2
//--------------------------------------------------------

//-------------------------
static inline void CreateVBOs(void)
{
    GLintptr theDataOffset = 0;
    GLintptr theIndexOffset = 0;

    glGenBuffers(1,theDataOffset,test1Data);
    theDataOffset += sizeof(test1Data);
    glBufferSubData(GL_ARRAY_BUFFER,test2Data);
    theDataOffset += sizeof(test2Data);

    glGenBuffers(1,GL_STATIC_DRAW);

    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER,theIndexOffset,sizeof(test1Trips),test1Trips);
    theIndexOffset += sizeof(test1Trips);
    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER,test2Trips);
    theIndexOffset += sizeof(test2Trips);
}

//------------------------------------------------------
static inline void DrawOutShape(void)
{
    glDrawElements(GL_TRIANGLES,(glushort*)(sizeof(glushort)*shapetest2->deOffset));
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。