Skip to content
Snippets Groups Projects
llvertexbuffer.cpp 48.4 KiB
Newer Older

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc, 3, GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_NORMAL], (void*)(base + mOffsets[TYPE_NORMAL]));
		}
		else if (!shader)
		{
			glNormalPointer(GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_NORMAL], (void*)(base + mOffsets[TYPE_NORMAL]));
		}
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_TEXCOORD3);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], (void*)(base + mOffsets[TYPE_TEXCOORD3]));
		}
		else if (!shader)
		{
			glClientActiveTextureARB(GL_TEXTURE3_ARB);
			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD3], (void*)(base + mOffsets[TYPE_TEXCOORD3]));
			glClientActiveTextureARB(GL_TEXTURE0_ARB);
		}
	if (data_mask & MAP_TEXCOORD2)
	{
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_TEXCOORD2);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], (void*)(base + mOffsets[TYPE_TEXCOORD2]));
		}
		else if (!shader)
		{
			glClientActiveTextureARB(GL_TEXTURE2_ARB);
			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD2], (void*)(base + mOffsets[TYPE_TEXCOORD2]));
			glClientActiveTextureARB(GL_TEXTURE0_ARB);
		}
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_TEXCOORD1);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1]));
		}
		else if (!shader)
		{
			glClientActiveTextureARB(GL_TEXTURE1_ARB);
			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1]));
			glClientActiveTextureARB(GL_TEXTURE0_ARB);
		}
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_BINORMAL);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc, 3,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL]));
		}
		else if (!shader)
		{
			glClientActiveTextureARB(GL_TEXTURE2_ARB);
			glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL]));
			glClientActiveTextureARB(GL_TEXTURE0_ARB);
		}
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_TEXCOORD0);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], (void*)(base + mOffsets[TYPE_TEXCOORD0]));
		}
		else if (!shader)
		{
			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD0], (void*)(base + mOffsets[TYPE_TEXCOORD0]));
		}
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_COLOR);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc, 4, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_COLOR], (void*)(base + mOffsets[TYPE_COLOR]));
		}
		else if (!shader)
		{
			glColorPointer(4, GL_UNSIGNED_BYTE, LLVertexBuffer::sTypeSize[TYPE_COLOR], (void*)(base + mOffsets[TYPE_COLOR]));
		}
	}
	if (data_mask & MAP_EMISSIVE)
	{
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_EMISSIVE);
		}

		if (loc >= 0)
		{
			glVertexAttribPointerARB(loc, 1, GL_UNSIGNED_BYTE, GL_TRUE, LLVertexBuffer::sTypeSize[TYPE_EMISSIVE], (void*)(base + mOffsets[TYPE_EMISSIVE]));
		}
	if (data_mask & MAP_WEIGHT)
	{
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_WEIGHT);
		}

		if (loc < 0)
		{ //legacy behavior, some shaders have weight hardcoded to location 1
			loc = 1;
		}
		
		glVertexAttribPointerARB(loc, 1, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT], (void*)(base + mOffsets[TYPE_WEIGHT]));
		
David Parks's avatar
David Parks committed
	{
		if (shader)
		{
			S32 loc = shader->getAttribLocation(TYPE_WEIGHT4);
			if (loc > -1)
			{
				glVertexAttribPointerARB(loc, 4, GL_FLOAT, FALSE, LLVertexBuffer::sTypeSize[TYPE_WEIGHT4], (void*)(base+mOffsets[TYPE_WEIGHT4]));
			}
		}
	if (data_mask & MAP_CLOTHWEIGHT)
	{
		S32 loc = -1;
		if (shader)
		{
			loc = shader->getAttribLocation(TYPE_CLOTHWEIGHT);
		}

		if (loc < 0)
		{ //legacy behavior, some shaders have weight hardcoded to location 4
			loc = 4;
		}
		glVertexAttribPointerARB(loc, 4, GL_FLOAT, TRUE,  LLVertexBuffer::sTypeSize[TYPE_CLOTHWEIGHT], (void*)(base + mOffsets[TYPE_CLOTHWEIGHT]));
			loc = shader->getAttribLocation(TYPE_VERTEX);
			if (data_mask & MAP_TEXTURE_INDEX)
			{
				glVertexAttribPointerARB(loc, 4,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0));
			}
			else
			{
				glVertexAttribPointerARB(loc, 3,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0));
			}
		}
		else if (!shader)
		{
			if (data_mask & MAP_TEXTURE_INDEX)
			{
				glVertexPointer(4,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0));
			}
			else
			{
				glVertexPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_VERTEX], (void*)(base + 0));
			}