|
nux-1.14.0
|
Public Member Functions | |
| TemplateQuadBuffer (GpuDevice *, ShaderType Type=SHADER_TYPE_GLSL, int NumQuads=256) | |
| void | BindAttribute (INT AttributeLocation, UINT AttributeIndex) |
| Bind GLSL parameter. | |
| void | UnBindAttribute (INT AttributeLocation) |
| Bind NVidia CG parameter. | |
| void | UnBind () |
| void | Render (INT NumPrimitives) |
| void | SetPerQuadAttribute (UINT AttributeIndex, INT Num, Vector4 *) |
| Set the Vertices's attribute on a per quad basis. | |
| void | SetPerVertexAttribute (UINT AttributeIndex, INT Num, Vector4 *pVector) |
| Set the Vertices's attribute on a per vertex basis. | |
| void | UnSetQuadAttribute (UINT AttributeIndex) |
| void | SetNumQuads (int NumQuads) |
| int | GetNumQuads () const |
Protected Member Functions | |
| void | FormatQuads () |
Protected Attributes | |
| ObjectPtr< IOpenGLIndexBuffer > | m_IB |
Definition at line 41 of file GLTemplatePrimitiveBuffer.h.
| void nux::TemplateQuadBuffer::SetPerQuadAttribute | ( | UINT | AttributeIndex, |
| INT | Num, | ||
| Vector4 * | pVector | ||
| ) |
Set the Vertices's attribute on a per quad basis.
Set the Vertices's attribute on a per quad basis. All vertex of the quad will have the same value for the attribute index.
Definition at line 305 of file GLTemplatePrimitiveBuffer.cpp.
{
nuxAssert (AttributeIndex > 0); // Index 0 is the vertex position attribute. This on is set in the constructor.
nuxAssert (AttributeIndex < 16);
// Destroy the vertex buffer by setting it to NULL;
VertexAttributeBuffer[AttributeIndex] = ObjectPtr<IOpenGLVertexBuffer> (0);;
VertexAttributeBuffer[AttributeIndex] = m_pDeviceFactory->CreateVertexBuffer (m_NumQuad * 4 * sizeof (Vector4), VBO_USAGE_DYNAMIC);
FLOAT *data;
VertexAttributeBuffer[AttributeIndex]->Lock (0, m_NumQuad * 4 * sizeof (Vector4), (void **) &data);
INT i;
for (i = 0; (i < m_NumQuad) && (i < Num); i++)
{
for (INT j = 0; j < 4; j++)
{
data[16*i + 4*j + 0] = pVector[i].x;
data[16*i + 4*j + 1] = pVector[i].y;
data[16*i + 4*j + 2] = pVector[i].z;
data[16*i + 4*j + 3] = pVector[i].w;
}
}
while (i < m_NumQuad)
{
// this happens if Num < m_NumQuad.
// Fill the rest with the last element of the parameter array passed as argument of the function.
for (INT j = 0; j < 4; j++)
{
data[16*i + 4*j + 0] = pVector[Num-1].x;
data[16*i + 4*j + 1] = pVector[Num-1].y;
data[16*i + 4*j + 2] = pVector[Num-1].z;
data[16*i + 4*j + 3] = pVector[Num-1].w;
}
i++;
}
VertexAttributeBuffer[AttributeIndex]->Unlock();
}
| void nux::TemplateQuadBuffer::SetPerVertexAttribute | ( | UINT | AttributeIndex, |
| INT | Num, | ||
| Vector4 * | pVector | ||
| ) |
Set the Vertices's attribute on a per vertex basis.
Set the vertex attribute on a per vertex basis.
Definition at line 349 of file GLTemplatePrimitiveBuffer.cpp.
{
nuxAssert (AttributeIndex > 0); // Index 0 is the vertex position attribute. This on is set in the constructor.
nuxAssert (AttributeIndex < 16);
// Destroy the vertex buffer by setting it to NULL;
VertexAttributeBuffer[AttributeIndex] = ObjectPtr<IOpenGLVertexBuffer> (0);;
VertexAttributeBuffer[AttributeIndex] = m_pDeviceFactory->CreateVertexBuffer (m_NumQuad * 4 * sizeof (Vector4), VBO_USAGE_DYNAMIC);
FLOAT *data;
VertexAttributeBuffer[AttributeIndex]->Lock (0, m_NumQuad * 4 * sizeof (Vector4), (void **) &data);
INT i;
for (i = 0; (i < m_NumQuad * 4) && (i < Num); i++)
{
data[4*i+0] = pVector[i].x;
data[4*i+1] = pVector[i].y;
data[4*i+2] = pVector[i].z;
data[4*i+3] = pVector[i].w;
}
while (i < m_NumQuad * 4)
{
// this happens if Num < m_NumQuad.
// Fill the rest with the last element of the parameter array passed as argument of the function.
data[4*i+0] = pVector[Num-1].x;
data[4*i+1] = pVector[Num-1].y;
data[4*i+2] = pVector[Num-1].z;
data[4*i+3] = pVector[Num-1].w;
i++;
}
VertexAttributeBuffer[AttributeIndex]->Unlock();
}