示例#1
0
	void OGL4ShaderProgram::CollectUniformBlocks()
	{
		GLint count = 0;
		glGetProgramiv(m_program, GL_ACTIVE_UNIFORM_BLOCKS, &count);

		for(int i = 0; i < count; ++i)
		{
			char szName[1024];
			glGetActiveUniformBlockName(m_program, i, 1024, 0, szName);

			GLint bytes = 0;
			glGetActiveUniformBlockiv(m_program, i, GL_UNIFORM_BLOCK_DATA_SIZE, &bytes);
			
			OGL4BufferPtr pBuffer = std::make_shared<OGL4Buffer>();
			if(pBuffer->Create(BT_CONSTANT_BUFFER, bytes, nullptr, true) == false)
			{
				pBuffer->Release();
				pBuffer.reset();
				continue;
			}
			UniformBlock block;
			block.index = i;
			block.name = szName;
			block.pBuffer = pBuffer;

			m_uniformBlocks.push_back(block);
		}
	}
示例#2
0
	bool OGL4GeometryData::AllocIndexBuffer(uint32 bytes, void* initData, bool dynamic, G_FORMAT format)
	{
		OGL4BufferPtr pBuffer = std::make_shared<OGL4Buffer>();
		if(pBuffer->Create(BT_INDEX_BUFFER, bytes, initData, dynamic) == false)
		{
			return false;
		}

		AttachIndexBuffer(pBuffer, format);
		return true;
	}
示例#3
0
	bool OGL4GeometryData::AllocVertexBuffer(uint32 bytes, void* initData, bool dynamic, const VertexLayout& layout)
	{
		OGL4BufferPtr pBuffer = std::make_shared<OGL4Buffer>();
		if(pBuffer->Create(BT_VERTEX_BUFFER, bytes, initData, dynamic) == false)
		{
			return false;
		}
		AttachVertexBuffer(pBuffer, layout);

		return true;
	}