Skip to content

Commit

Permalink
changed vtx and uv buffers to const in MOAIGfxDevice; moved implement…
Browse files Browse the repository at this point in the history
…ation of MOAIQuadBrush 'draw' variants into MOAIGfxDevice
  • Loading branch information
patrickmeehan committed May 16, 2012
1 parent 6b1303a commit 26d7dfa
Show file tree
Hide file tree
Showing 4 changed files with 167 additions and 208 deletions.
237 changes: 158 additions & 79 deletions src/moaicore/MOAIGfxDevice.cpp
Expand Up @@ -1567,6 +1567,56 @@ void MOAIGfxDevice::SoftReleaseResources ( u32 age ) {
glFlush ();
}

//----------------------------------------------------------------//
void MOAIGfxDevice::TransformAndWriteQuad ( USVec4D* vtx, USVec2D* uv ) {

if ( this->mCpuVertexTransform ) {
this->mCpuVertexTransformMtx.TransformQuad ( vtx );
}

if ( this->mCpuUVTransform ) {
this->mUVTransform.TransformQuad ( uv );
}

this->BeginPrim ();

// left top
this->Write ( vtx [ 0 ]);
this->Write ( uv [ 0 ]);
this->WriteFinalColor4b ();

// left bottom
this->Write ( vtx [ 3 ]);
this->Write ( uv [ 3 ]);
this->WriteFinalColor4b ();

// right bottom
this->Write ( vtx[ 2 ]);
this->Write ( uv [ 2 ]);
this->WriteFinalColor4b ();

this->EndPrim ();

this->BeginPrim ();

// left top
this->Write ( vtx [ 0 ]);
this->Write ( uv [ 0 ]);
this->WriteFinalColor4b ();

// right bottom
this->Write ( vtx [ 2 ]);
this->Write ( uv [ 2 ]);
this->WriteFinalColor4b ();

// right top
this->Write ( vtx [ 1 ]);
this->Write ( uv [ 1 ]);
this->WriteFinalColor4b ();

this->EndPrim ();
}

//----------------------------------------------------------------//
void MOAIGfxDevice::UpdateFinalColor () {

Expand Down Expand Up @@ -1730,107 +1780,136 @@ USRect MOAIGfxDevice::WndRectToDevice ( USRect rect ) const {
}

//----------------------------------------------------------------//
void MOAIGfxDevice::WriteQuad ( USVec2D* vtx, USVec2D* uv ) {

USVec4D vtx4D [ 4 ];
void MOAIGfxDevice::WriteQuad ( const USVec2D* vtx, const USVec2D* uv ) {

USVec4D vtxBuffer [ 4 ];

vtx4D [ 0 ].mX = vtx [ 0 ].mX;
vtx4D [ 0 ].mY = vtx [ 0 ].mY;
vtx4D [ 0 ].mZ = 0.0f;
vtx4D [ 0 ].mW = 1.0f;

vtx4D [ 1 ].mX = vtx [ 1 ].mX;
vtx4D [ 1 ].mY = vtx [ 1 ].mY;
vtx4D [ 1 ].mZ = 0.0f;
vtx4D [ 1 ].mW = 1.0f;
vtxBuffer [ 0 ].mX = vtx [ 0 ].mX;
vtxBuffer [ 0 ].mY = vtx [ 0 ].mY;
vtxBuffer [ 0 ].mZ = 0.0f;
vtxBuffer [ 0 ].mW = 1.0f;

vtx4D [ 2 ].mX = vtx [ 2 ].mX;
vtx4D [ 2 ].mY = vtx [ 2 ].mY;
vtx4D [ 2 ].mZ = 0.0f;
vtx4D [ 2 ].mW = 1.0f;
vtxBuffer [ 1 ].mX = vtx [ 1 ].mX;
vtxBuffer [ 1 ].mY = vtx [ 1 ].mY;
vtxBuffer [ 1 ].mZ = 0.0f;
vtxBuffer [ 1 ].mW = 1.0f;

vtx4D [ 3 ].mX = vtx [ 3 ].mX;
vtx4D [ 3 ].mY = vtx [ 3 ].mY;
vtx4D [ 3 ].mZ = 0.0f;
vtx4D [ 3 ].mW = 1.0f;
vtxBuffer [ 2 ].mX = vtx [ 2 ].mX;
vtxBuffer [ 2 ].mY = vtx [ 2 ].mY;
vtxBuffer [ 2 ].mZ = 0.0f;
vtxBuffer [ 2 ].mW = 1.0f;

vtxBuffer [ 3 ].mX = vtx [ 3 ].mX;
vtxBuffer [ 3 ].mY = vtx [ 3 ].mY;
vtxBuffer [ 3 ].mZ = 0.0f;
vtxBuffer [ 3 ].mW = 1.0f;

USVec2D uvBuffer [ 4 ];
memcpy ( uvBuffer, uv, sizeof ( USVec2D ) * 4 );

this->TransformAndWriteQuad ( vtxBuffer, uvBuffer );
}

//----------------------------------------------------------------//
void MOAIGfxDevice::WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff ) {

this->WriteQuad ( vtx4D, uv );
USVec4D vtxBuffer [ 4 ];

vtxBuffer [ 0 ].mX = vtx [ 0 ].mX + xOff;
vtxBuffer [ 0 ].mY = vtx [ 0 ].mY + yOff;
vtxBuffer [ 0 ].mZ = zOff;
vtxBuffer [ 0 ].mW = 1.0f;

vtxBuffer [ 1 ].mX = vtx [ 1 ].mX + xOff;
vtxBuffer [ 1 ].mY = vtx [ 1 ].mY + yOff;
vtxBuffer [ 1 ].mZ = zOff;
vtxBuffer [ 1 ].mW = 1.0f;

vtxBuffer [ 2 ].mX = vtx [ 2 ].mX + xOff;
vtxBuffer [ 2 ].mY = vtx [ 2 ].mY + yOff;
vtxBuffer [ 2 ].mZ = zOff;
vtxBuffer [ 2 ].mW = 1.0f;

vtxBuffer [ 3 ].mX = vtx [ 3 ].mX + xOff;
vtxBuffer [ 3 ].mY = vtx [ 3 ].mY + yOff;
vtxBuffer [ 3 ].mZ = zOff;
vtxBuffer [ 3 ].mW = 1.0f;

USVec2D uvBuffer [ 4 ];
memcpy ( uvBuffer, uv, sizeof ( USVec2D ) * 4 );

this->TransformAndWriteQuad ( vtxBuffer, uvBuffer );
}

//----------------------------------------------------------------//
void MOAIGfxDevice::WriteQuad ( USVec3D* vtx, USVec2D* uv ) {
void MOAIGfxDevice::WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff, float xScale, float yScale ) {

USVec4D vtx4D [ 4 ];
USVec4D vtxBuffer [ 4 ];

vtxBuffer [ 0 ].mX = ( vtx [ 0 ].mX * xScale ) + xOff;
vtxBuffer [ 0 ].mY = ( vtx [ 0 ].mY * yScale ) + yOff;
vtxBuffer [ 0 ].mZ = zOff;
vtxBuffer [ 0 ].mW = 1.0f;

vtx4D [ 0 ].mX = vtx [ 0 ].mX;
vtx4D [ 0 ].mY = vtx [ 0 ].mY;
vtx4D [ 0 ].mZ = vtx [ 0 ].mZ;
vtx4D [ 0 ].mW = 1.0f;
vtxBuffer [ 1 ].mX = ( vtx [ 1 ].mX * xScale ) + xOff;
vtxBuffer [ 1 ].mY = ( vtx [ 1 ].mY * yScale ) + yOff;
vtxBuffer [ 1 ].mZ = zOff;
vtxBuffer [ 1 ].mW = 1.0f;

vtx4D [ 1 ].mX = vtx [ 1 ].mX;
vtx4D [ 1 ].mY = vtx [ 1 ].mY;
vtx4D [ 1 ].mZ = vtx [ 1 ].mZ;
vtx4D [ 1 ].mW = 1.0f;
vtxBuffer [ 2 ].mX = ( vtx [ 2 ].mX * xScale ) + xOff;
vtxBuffer [ 2 ].mY = ( vtx [ 2 ].mY * yScale ) + yOff;
vtxBuffer [ 2 ].mZ = zOff;
vtxBuffer [ 2 ].mW = 1.0f;

vtx4D [ 2 ].mX = vtx [ 2 ].mX;
vtx4D [ 2 ].mY = vtx [ 2 ].mY;
vtx4D [ 2 ].mZ = vtx [ 2 ].mZ;
vtx4D [ 2 ].mW = 1.0f;
vtxBuffer [ 3 ].mX = ( vtx [ 3 ].mX * xScale ) + xOff;
vtxBuffer [ 3 ].mY = ( vtx [ 3 ].mY * yScale ) + yOff;
vtxBuffer [ 3 ].mZ = zOff;
vtxBuffer [ 3 ].mW = 1.0f;

vtx4D [ 3 ].mX = vtx [ 3 ].mX;
vtx4D [ 3 ].mY = vtx [ 3 ].mY;
vtx4D [ 3 ].mZ = vtx [ 3 ].mZ;
vtx4D [ 3 ].mW = 1.0f;

this->WriteQuad ( vtx4D, uv );
USVec2D uvBuffer [ 4 ];
memcpy ( uvBuffer, uv, sizeof ( USVec2D ) * 4 );

this->TransformAndWriteQuad ( vtxBuffer, uvBuffer );
}

//----------------------------------------------------------------//
void MOAIGfxDevice::WriteQuad ( USVec4D* vtx, USVec2D* uv ) {
void MOAIGfxDevice::WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff, float xScale, float yScale, float uOff, float vOff, float uScale, float vScale ) {

if ( this->mCpuVertexTransform ) {
this->mCpuVertexTransformMtx.TransformQuad ( vtx );
}
USVec4D vtxBuffer [ 4 ];

if ( this->mCpuUVTransform ) {
this->mUVTransform.TransformQuad ( uv );
}
vtxBuffer [ 0 ].mX = ( vtx [ 0 ].mX * xScale ) + xOff;
vtxBuffer [ 0 ].mY = ( vtx [ 0 ].mY * yScale ) + yOff;
vtxBuffer [ 0 ].mZ = zOff;
vtxBuffer [ 0 ].mW = 1.0f;

this->BeginPrim ();
vtxBuffer [ 1 ].mX = ( vtx [ 1 ].mX * xScale ) + xOff;
vtxBuffer [ 1 ].mY = ( vtx [ 1 ].mY * yScale ) + yOff;
vtxBuffer [ 1 ].mZ = zOff;
vtxBuffer [ 1 ].mW = 1.0f;

vtxBuffer [ 2 ].mX = ( vtx [ 2 ].mX * xScale ) + xOff;
vtxBuffer [ 2 ].mY = ( vtx [ 2 ].mY * yScale ) + yOff;
vtxBuffer [ 2 ].mZ = zOff;
vtxBuffer [ 2 ].mW = 1.0f;

// left top
this->Write ( vtx [ 0 ]);
this->Write ( uv [ 0 ]);
this->WriteFinalColor4b ();

// left bottom
this->Write ( vtx [ 3 ]);
this->Write ( uv [ 3 ]);
this->WriteFinalColor4b ();
vtxBuffer [ 3 ].mX = ( vtx [ 3 ].mX * xScale ) + xOff;
vtxBuffer [ 3 ].mY = ( vtx [ 3 ].mY * yScale ) + yOff;
vtxBuffer [ 3 ].mZ = zOff;
vtxBuffer [ 3 ].mW = 1.0f;

// right bottom
this->Write ( vtx[ 2 ]);
this->Write ( uv [ 2 ]);
this->WriteFinalColor4b ();

this->EndPrim ();
USVec2D uvBuffer [ 4 ];

this->BeginPrim ();
uvBuffer [ 0 ].mX = ( uv [ 0 ].mX * uScale ) + uOff;
uvBuffer [ 0 ].mY = ( uv [ 0 ].mY * vScale ) + vOff;

// left top
this->Write ( vtx [ 0 ]);
this->Write ( uv [ 0 ]);
this->WriteFinalColor4b ();
uvBuffer [ 1 ].mX = ( uv [ 1 ].mX * uScale ) + uOff;
uvBuffer [ 1 ].mY = ( uv [ 1 ].mY * vScale ) + vOff;

uvBuffer [ 2 ].mX = ( uv [ 2 ].mX * uScale ) + uOff;
uvBuffer [ 2 ].mY = ( uv [ 2 ].mY * vScale ) + vOff;

// right bottom
this->Write ( vtx [ 2 ]);
this->Write ( uv [ 2 ]);
this->WriteFinalColor4b ();
uvBuffer [ 3 ].mX = ( uv [ 3 ].mX * uScale ) + uOff;
uvBuffer [ 3 ].mY = ( uv [ 3 ].mY * vScale ) + vOff;

// right top
this->Write ( vtx [ 1 ]);
this->Write ( uv [ 1 ]);
this->WriteFinalColor4b ();

this->EndPrim ();
this->TransformAndWriteQuad ( vtxBuffer, uvBuffer );
}
10 changes: 5 additions & 5 deletions src/moaicore/MOAIGfxDevice.h
Expand Up @@ -175,6 +175,7 @@ class MOAIGfxDevice :
void GpuMultMatrix ( const USMatrix4x4& mtx ) const;
void InsertGfxResource ( MOAIGfxResource& resource );
void RemoveGfxResource ( MOAIGfxResource& resource );
void TransformAndWriteQuad ( USVec4D* vtx, USVec2D* uv );
void UpdateFinalColor ();
void UpdateCpuVertexMtx ();
void UpdateGpuVertexMtx ();
Expand Down Expand Up @@ -316,11 +317,10 @@ class MOAIGfxDevice :

void UpdateViewVolume ();

// TODO: these should take *const* buffers
// TODO: move variations to perform offet/scale when drawing her from MOAIQuadBrush
void WriteQuad ( USVec2D* vtx, USVec2D* uv );
void WriteQuad ( USVec3D* vtx, USVec2D* uv );
void WriteQuad ( USVec4D* vtx, USVec2D* uv );
void WriteQuad ( const USVec2D* vtx, const USVec2D* uv );
void WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff );
void WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff, float xScale, float yScale );
void WriteQuad ( const USVec2D* vtx, const USVec2D* uv, float xOff, float yOff, float zOff, float xScale, float yScale, float uOff, float vOff, float uScale, float vScale );

//----------------------------------------------------------------//
template < typename TYPE >
Expand Down

0 comments on commit 26d7dfa

Please sign in to comment.