当前位置: 首页>>代码示例>>C++>>正文


C++ Vector4d::define方法代码示例

本文整理汇总了C++中Vector4d::define方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector4d::define方法的具体用法?C++ Vector4d::define怎么用?C++ Vector4d::define使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Vector4d的用法示例。


在下文中一共展示了Vector4d::define方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: renderGui

        //----------------------------------------------------------------------------------------------------------
        void GlesGuiRenderer::renderGui(Gui* gui)
        {
                if(gui == nullptr)
                        return;

                const auto& elements = gui->getElements();

                const uint32_t numFramesPerBatch   = 50;
                const uint32_t numVerticesPerFrame = 6;
                const uint32_t numVectorsPerVertex = 2;
                const float characterSize = 0.0625f;
                static Vector4d frameVertices[numVectorsPerVertex * numFramesPerBatch * numVerticesPerFrame];
                static uint32_t vertexIndices[numVerticesPerFrame] = {0, 2, 1, 2, 3, 1};

                static Vector2d vertexOffsets[] =
                {
                        Vector2d(),
                        Vector2d(),
                        Vector2d(),
                        Vector2d()
                };

                static Vector2d fontOffsets[4] =
                {
                        Vector2d(0.0f, 0.0f),
                        Vector2d(characterSize, 0.0f),
                        Vector2d(0.0f, characterSize),
                        Vector2d(characterSize, characterSize)
                };

                glDisable(GL_DEPTH_TEST);
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glDisable");

                glEnable(GL_BLEND);
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glEnable");

                glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glBlendFunc");

                // render frames
                framesRenderingProgram_.set();
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glUseProgram");

                glEnableVertexAttribArray(LOCATION_ATTRIBUTE_POSITION);
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glEnableVertexAttribArray");

                glEnableVertexAttribArray(LOCATION_ATTRIBUTE_COLOR);
                CHECK_GLES_ERROR("GlesGuiRenderer::renderGui: glEnableVertexAttribArray");

                uint32_t numFrames = 0;
                Vector4d* currentVertex = frameVertices;
                for(auto it = elements.begin(); it != elements.end(); ++it)
                {
                        if(!it->second)
                                continue;

                        auto element = it->second.get();
                        if(element->is(GUI_ELEMENT_HIDDEN))
                                continue;

                        Vector4d color = element->getBackgroundColor(GUI_ELEMENT_COLOR_DEFAULT);

                        if(element->is(GUI_ELEMENT_SELECTED))
                                color = element->getBackgroundColor(GUI_ELEMENT_COLOR_SELECTED);
                        else if(element->is(GUI_ELEMENT_TOUCHED))
                                color = element->getBackgroundColor(GUI_ELEMENT_COLOR_TOUCHED);

                        const auto& size = element->getSize();
                        const auto& position = element->getPosition();

                        vertexOffsets[1] = Vector2d(size.x, 0.0f);
                        vertexOffsets[2] = Vector2d(0.0f, size.y);
                        vertexOffsets[3] = Vector2d(size.x, size.y);

                        for(uint32_t i = 0; i < numVerticesPerFrame; ++i)
                        {
                                currentVertex->define(position + vertexOffsets[vertexIndices[i]], 0.0f, 1.0f);
                                ++currentVertex;
                                *currentVertex = color;
                                ++currentVertex;
                        }

                        ++numFrames;

                        if(numFrames == numFramesPerBatch)
                        {
                                glVertexAttribPointer(LOCATION_ATTRIBUTE_POSITION, 4, GL_FLOAT, GL_FALSE,
                                                      2 * sizeof(Vector4d), static_cast<void*>(frameVertices));
                                glVertexAttribPointer(LOCATION_ATTRIBUTE_COLOR,    4, GL_FLOAT, GL_FALSE,
                                                      2 * sizeof(Vector4d), static_cast<void*>(frameVertices + 1));
                                glDrawArrays(GL_TRIANGLES, 0, numFrames * numVerticesPerFrame);

                                numFrames = 0;
                                currentVertex = frameVertices;
                        }
                }

                if(numFrames != 0)
                {
//.........这里部分代码省略.........
开发者ID:everard,项目名称:SELENE-Device,代码行数:101,代码来源:GLESGUIRenderer.cpp


注:本文中的Vector4d::define方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。