本文整理汇总了C++中CIwMaterial::SetDepthWriteMode方法的典型用法代码示例。如果您正苦于以下问题:C++ CIwMaterial::SetDepthWriteMode方法的具体用法?C++ CIwMaterial::SetDepthWriteMode怎么用?C++ CIwMaterial::SetDepthWriteMode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CIwMaterial
的用法示例。
在下文中一共展示了CIwMaterial::SetDepthWriteMode方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ImGui_Marmalade_RenderDrawLists
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
void ImGui_Marmalade_RenderDrawLists(ImDrawData* draw_data)
{
// Handle cases of screen coordinates != from framebuffer coordinates (e.g. retina displays)
ImGuiIO& io = ImGui::GetIO();
draw_data->ScaleClipRects(io.DisplayFramebufferScale);
// Render command lists
for(int n = 0; n < draw_data->CmdListsCount; n++)
{
const ImDrawList* cmd_list = draw_data->CmdLists[n];
const unsigned char* vtx_buffer = (const unsigned char*)&cmd_list->VtxBuffer.front();
const ImDrawIdx* idx_buffer = &cmd_list->IdxBuffer.front();
int nVert = cmd_list->VtxBuffer.size();
CIwFVec2* pVertStream = IW_GX_ALLOC(CIwFVec2, nVert);
CIwFVec2* pUVStream = IW_GX_ALLOC(CIwFVec2, nVert);
CIwColour* pColStream = IW_GX_ALLOC(CIwColour, nVert);
for( int i=0; i < nVert; i++ )
{
// TODO: optimize multiplication on gpu using vertex shader
pVertStream[i].x = cmd_list->VtxBuffer[i].pos.x * g_scale.x;
pVertStream[i].y = cmd_list->VtxBuffer[i].pos.y * g_scale.y;
pUVStream[i].x = cmd_list->VtxBuffer[i].uv.x;
pUVStream[i].y = cmd_list->VtxBuffer[i].uv.y;
pColStream[i] = cmd_list->VtxBuffer[i].col;
}
IwGxSetVertStreamScreenSpace(pVertStream, nVert);
IwGxSetUVStream(pUVStream);
IwGxSetColStream(pColStream, nVert);
IwGxSetNormStream(0);
for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.size(); cmd_i++)
{
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
if (pcmd->UserCallback)
{
pcmd->UserCallback(cmd_list,pcmd);
}
else
{
CIwMaterial* pCurrentMaterial = IW_GX_ALLOC_MATERIAL();
pCurrentMaterial->SetShadeMode(CIwMaterial::SHADE_FLAT);
pCurrentMaterial->SetCullMode(CIwMaterial::CULL_NONE);
pCurrentMaterial->SetFiltering(false);
pCurrentMaterial->SetAlphaMode(CIwMaterial::ALPHA_BLEND);
pCurrentMaterial->SetDepthWriteMode(CIwMaterial::DEPTH_WRITE_NORMAL);
pCurrentMaterial->SetAlphaTestMode(CIwMaterial::ALPHATEST_DISABLED);
pCurrentMaterial->SetTexture((CIwTexture*)pcmd->TextureId);
IwGxSetMaterial(pCurrentMaterial);
IwGxDrawPrims(IW_GX_TRI_LIST, (uint16*)idx_buffer, pcmd->ElemCount);
}
idx_buffer += pcmd->ElemCount;
}
IwGxFlush();
}
// TODO: restore modified state (i.e. mvp matrix)
}
示例2: DrawPrimitives
void CzPlatformRender::DrawPrimitives(CzRenderPrim3* prims, CzRenderMaterial* materials, int num_prims, bool single_material)
{
while (num_prims-- > 0)
{
CIwMaterial::AlphaMode am = (CIwMaterial::AlphaMode)materials->AlphaMode; // TODO Add proper method to map Marmalade Alpha mode to Marmalade
int vc = prims->VertCount;
// Set up vertex streams
if (prims->UVs != NULL)
IwGxSetUVStream((CIwFVec2*)prims->UVs, 0);
else
IwGxSetUVStream(NULL);
if (prims->ModelSpace)
IwGxSetVertStreamModelSpace((CIwFVec3*)prims->Verts, vc);
else
IwGxSetVertStreamViewSpace((CIwFVec3*)prims->Verts, vc);
IwGxSetColStream((CIwColour*)prims->Colours);
IwGxSetNormStream((CIwFVec3*)prims->Normals);
CzTexture texture = materials->Image->getTexture();
CIwTexture* mt = static_cast<CIwTexture*>(texture);
bool filter;
if (materials->Image->isFilterSet())
filter = mt->GetFiltering();
else
filter = materials->Filter;
// Only create new render material if something important has changed
if (texture != CurrentTexture || CurrentAlphaMode != materials->AlphaMode || CurrentFilter != filter || CurrentTexture == NULL || CurrentTiled != materials->Tiled)
{
CIwMaterial* mat = IW_GX_ALLOC_MATERIAL();
mat->SetTexture(mt);
mat->SetDepthWriteMode(CIwMaterial::DEPTH_WRITE_DISABLED);
mat->SetClamping(!materials->Tiled);
mat->SetFiltering(filter);
mat->SetAlphaMode(am);
mat->SetCullMode(CIwMaterial::CULL_BACK);
// mat->SetCullMode(CIwMaterial::CULL_NONE);
IwGxSetMaterial(mat);
CurrentTexture = texture;
CurrentAlphaMode = materials->AlphaMode;
CurrentTiled = materials->Tiled;
CurrentFilter = filter;
}
else
{
RedundantTextureCalls++;
}
// Render the primitive
IwGxDrawPrims(CzToIwGxPrimType[prims->Type], prims->Indices, prims->IndicesCount);
// Move to next primitive
prims++;
if (!single_material)
materials++;
}
}
示例3: BatchDrawPrims
// BatchDrawPrims - Currently only supports batching of Quad lists
void CzPlatformRender::BatchDrawPrims(bool filter)
{
if (NextMaterial == 0)
return;
// Allocate memory from data cache for verts, UV's and colours
for (int t = 0; t < NextMaterial; t++)
{
int prim_count = MaterialUsedCounts[t] * 4;
BatchVerts[t] = IW_GX_ALLOC(CzVec2, prim_count);
BatchUVs[t] = IW_GX_ALLOC(CzVec2, prim_count);
BatchColours[t] = IW_GX_ALLOC(CzColour, prim_count);
BatchIndices[t] = IW_GX_ALLOC(uint16, prim_count);
}
// Populate the data cache
CzRenderPrim** prims = Primitives;
for (int t = 0; t < NextPrimitive; t++)
{
CzRenderPrim *prim = *prims;
int mat_id = prim->MaterialID;
int idx = MaterialIndices[mat_id];
CzVec2* v = BatchVerts[mat_id] + idx;
CzVec2* uv = BatchUVs[mat_id] + idx;
CzColour* c = BatchColours[mat_id] + idx;
uint16* i = BatchIndices[mat_id] + idx;
for (int t2 = 0; t2 < 4; t2++)
{
v->x = (prim->Verts + t2)->x;
v->y = (prim->Verts + t2)->y;
uv->x = (prim->UVs + t2)->x;
uv->y = (prim->UVs + t2)->y;
c->set(*(prim->Colours + t2));
v++; uv++; c++;
}
// TODO: ERROR - Does not work with batched ngon
*i++ = idx;
*i++ = idx + 3;
*i++ = idx + 2;
*i++ = idx + 1;
MaterialIndices[mat_id] += 4;
prims++;
}
// Render batched streams
CzRenderMaterial** mats = Materials;
for (int t = 0; t < NextMaterial; t++)
{
int count = MaterialUsedCounts[t] * 4;
IwGxSetUVStream((CIwFVec2*)BatchUVs[t], 0);
IwGxSetVertStreamScreenSpace((CIwFVec2*)BatchVerts[t], count);
IwGxSetColStream((CIwColour*)(BatchColours[t]), count);
IwGxSetNormStream(NULL);
CIwMaterial* mat = IW_GX_ALLOC_MATERIAL();
CIwTexture* texture = static_cast<CIwTexture*>((*mats)->Image->getTexture());
mat->SetTexture(texture);
mat->SetDepthWriteMode(CIwMaterial::DEPTH_WRITE_DISABLED);
mat->SetClamping(false);
mat->SetFiltering(filter);
mat->SetAlphaMode(CIwMaterial::ALPHA_BLEND);
mat->SetCullMode(CIwMaterial::CULL_BACK);
// mat->SetCullMode(CIwMaterial::CULL_NONE);
IwGxSetMaterial(mat);
IwGxDrawPrims(IW_GX_QUAD_LIST, BatchIndices[t], count);
mats++;
}
// Reset batch pointers
for (int t = 0; t < NextMaterial; t++)
MaterialUsedCounts[t] = 0;
for (int t = 0; t < NextMaterial; t++)
MaterialIndices[t] = 0;
NextPrimitive = 0;
NextMaterial = 0;
}
示例4: DrawText
//.........这里部分代码省略.........
IwGxLightingOn();
IwGxSetColStream(NULL);
IwGxSetNormStream(NULL);
CIwGxFont* mfont = static_cast<CIwGxFont*>(font->getFontHandle());
CIwGxFontPreparedData* prep_text = static_cast<CIwGxFontPreparedData*>(prepared_text);
// A font can consist of multiple materials so we need to process all of them
for (int t = 0; t < mfont->GetNumberMaterials(); t++)
{
// Set UV stream
uint32* char_ids;
int num_chars = IwGxFontSetUVs(*prep_text, -1, t, &char_ids);
// Generate transformed vertices from glyphs
int nv = num_chars << 2;
CzVec2* pVerts = IW_GX_ALLOC(CzVec2, nv);
CzVec2* pVert = pVerts;
if (m01 == 0 && m10 == 0)
{
// No rotation optimisation
for (int t2 = 0; t2 < num_chars; t2++)
{
CIwRect rc = prep_text->GetCharacterArea(char_ids[t2]);
float x1 = (float)rc.x;
float y1 = (float)rc.y;
float x2 = x1 + (float)rc.w;
float y2 = y1 + (float)rc.h;
float ax = (m00 * x1) + tx;
float ay = (m11 * y1) + ty;
float bx = (m00 * x2) + tx;
float by = (m11 * y2) + ty;
// if ((ax < clip.w && bx >= clip.x) && (ay < clip.h && by >= clip.y))
// {
pVert->x = ax + sx1;
pVert->y = ay + sy1;
pVert++;
pVert->x = ax - sx1;
pVert->y = by + sy2;
pVert++;
pVert->x = bx - sx2;
pVert->y = by - sy2;
pVert++;
pVert->x = bx + sx2;
pVert->y = ay - sy1;
pVert++;
// }
}
}
else
{
for (int t2 = 0; t2 < num_chars; t2++)
{
CIwRect rc = prep_text->GetCharacterArea(char_ids[t2]);
float x1 = (float)rc.x;
float y1 = (float)rc.y;
float x2 = x1 + (float)rc.w;
float y2 = y1 + (float)rc.h;
pVert->x = (m00 * x1 + m10 * y1 + tx + sx1);
pVert->y = (m01 * x1 + m11 * y1 + ty + sy1);
pVert++;
pVert->x = (m00 * x1 + m10 * y2 + tx - sx1);
pVert->y = (m01 * x1 + m11 * y2 + ty + sy2);
pVert++;
pVert->x = (m00 * x2 + m10 * y2 + tx - sx2);
pVert->y = (m01 * x2 + m11 * y2 + ty - sy2);
pVert++;
pVert->x = (m00 * x2 + m10 * y1 + tx + sx2);
pVert->y = (m01 * x2 + m11 * y1 + ty - sy1);
pVert++;
}
}
if (nv > 0)
{
// Set vertex stream
IwGxSetVertStreamScreenSpace((CIwFVec2*)pVerts, nv);
// Create a material
CIwMaterial* mat = IW_GX_ALLOC_MATERIAL();
mat->Copy(*IwGxFontGetFont()->GetMaterial(t));
mat->SetDepthWriteMode(CIwMaterial::DEPTH_WRITE_DISABLED);
mat->SetColEmissive(colour.get());
mat->SetClamping(true);
mat->SetFiltering(filter);
mat->SetAlphaMode(am);
mat->SetCullMode(CIwMaterial::CULL_BACK);
// mat->SetCullMode(CIwMaterial::CULL_NONE);
IwGxSetMaterial(mat);
// Finally draw the glyphs
IwGxDrawPrims(IW_GX_QUAD_LIST, NULL, nv);
CurrentAlphaMode = alpha_mode;
}
}
IwGxLightingOff();
CurrentTexture = NULL;
}