本文整理汇总了C++中CGUIShaderDX::DrawQuad方法的典型用法代码示例。如果您正苦于以下问题:C++ CGUIShaderDX::DrawQuad方法的具体用法?C++ CGUIShaderDX::DrawQuad怎么用?C++ CGUIShaderDX::DrawQuad使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CGUIShaderDX
的用法示例。
在下文中一共展示了CGUIShaderDX::DrawQuad方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CRect
void CD3DTexture::DrawQuad(const CPoint points[4], color_t color, unsigned numViews, ID3D11ShaderResourceView **view, const CRect *texCoords, SHADER_METHOD options)
{
XMFLOAT4 xcolor;
CD3DHelper::XMStoreColor(&xcolor, color);
CRect coords = texCoords ? *texCoords : CRect(0.0f, 0.0f, 1.0f, 1.0f);
Vertex verts[4] = {
{ XMFLOAT3(points[0].x, points[0].y, 0), xcolor, XMFLOAT2(coords.x1, coords.y1), XMFLOAT2(0.0f, 0.0f) },
{ XMFLOAT3(points[1].x, points[1].y, 0), xcolor, XMFLOAT2(coords.x2, coords.y1), XMFLOAT2(0.0f, 0.0f) },
{ XMFLOAT3(points[2].x, points[2].y, 0), xcolor, XMFLOAT2(coords.x2, coords.y2), XMFLOAT2(0.0f, 0.0f) },
{ XMFLOAT3(points[3].x, points[3].y, 0), xcolor, XMFLOAT2(coords.x1, coords.y2), XMFLOAT2(0.0f, 0.0f) },
};
CGUIShaderDX* pGUIShader = g_Windowing.GetGUIShader();
pGUIShader->Begin(view && numViews > 0 ? options : SHADER_METHOD_RENDER_DEFAULT);
if (view && numViews > 0)
pGUIShader->SetShaderViews(numViews, view);
pGUIShader->DrawQuad(verts[0], verts[1], verts[2], verts[3]);
}
示例2:
void CGUITextureD3D::Draw(float *x, float *y, float *z, const CRect &texture, const CRect &diffuse, int orientation)
{
XMFLOAT4 xcolor;
CD3DHelper::XMStoreColor(&xcolor, m_col);
Vertex verts[4];
verts[0].pos.x = x[0]; verts[0].pos.y = y[0]; verts[0].pos.z = z[0];
verts[0].texCoord.x = texture.x1; verts[0].texCoord.y = texture.y1;
verts[0].texCoord2.x = diffuse.x1; verts[0].texCoord2.y = diffuse.y1;
verts[0].color = xcolor;
verts[1].pos.x = x[1]; verts[1].pos.y = y[1]; verts[1].pos.z = z[1];
if (orientation & 4)
{
verts[1].texCoord.x = texture.x1;
verts[1].texCoord.y = texture.y2;
}
else
{
verts[1].texCoord.x = texture.x2;
verts[1].texCoord.y = texture.y1;
}
if (m_info.orientation & 4)
{
verts[1].texCoord2.x = diffuse.x1;
verts[1].texCoord2.y = diffuse.y2;
}
else
{
verts[1].texCoord2.x = diffuse.x2;
verts[1].texCoord2.y = diffuse.y1;
}
verts[1].color = xcolor;
verts[2].pos.x = x[2]; verts[2].pos.y = y[2]; verts[2].pos.z = z[2];
verts[2].texCoord.x = texture.x2; verts[2].texCoord.y = texture.y2;
verts[2].texCoord2.x = diffuse.x2; verts[2].texCoord2.y = diffuse.y2;
verts[2].color = xcolor;
verts[3].pos.x = x[3]; verts[3].pos.y = y[3]; verts[3].pos.z = z[3];
if (orientation & 4)
{
verts[3].texCoord.x = texture.x2;
verts[3].texCoord.y = texture.y1;
}
else
{
verts[3].texCoord.x = texture.x1;
verts[3].texCoord.y = texture.y2;
}
if (m_info.orientation & 4)
{
verts[3].texCoord2.x = diffuse.x2;
verts[3].texCoord2.y = diffuse.y1;
}
else
{
verts[3].texCoord2.x = diffuse.x1;
verts[3].texCoord2.y = diffuse.y2;
}
verts[3].color = xcolor;
CDXTexture* tex = (CDXTexture *)m_texture.m_textures[m_currentFrame];
CGUIShaderDX* pGUIShader = DX::Windowing().GetGUIShader();
pGUIShader->Begin(m_diffuse.size() ? SHADER_METHOD_RENDER_MULTI_TEXTURE_BLEND : SHADER_METHOD_RENDER_TEXTURE_BLEND);
if (m_diffuse.size())
{
CDXTexture* diff = (CDXTexture *)m_diffuse.m_textures[0];
ID3D11ShaderResourceView* resource[] = { tex->GetShaderResource(), diff->GetShaderResource() };
pGUIShader->SetShaderViews(ARRAYSIZE(resource), resource);
}
else
{
ID3D11ShaderResourceView* resource = tex->GetShaderResource();
pGUIShader->SetShaderViews(1, &resource);
}
pGUIShader->DrawQuad(verts[0], verts[1], verts[2], verts[3]);
}
示例3: Render
void CSlideShowPic::Render(float *x, float *y, CBaseTexture* pTexture, UTILS::Color color)
{
#ifdef HAS_DX
Vertex vertex[5];
for (int i = 0; i < 4; i++)
{
vertex[i].pos = XMFLOAT3( x[i], y[i], 0);
CD3DHelper::XMStoreColor(&vertex[i].color, color);
vertex[i].texCoord = XMFLOAT2(0.0f, 0.0f);
vertex[i].texCoord2 = XMFLOAT2(0.0f, 0.0f);
}
if (pTexture)
{
vertex[1].texCoord.x = vertex[2].texCoord.x = (float) pTexture->GetWidth() / pTexture->GetTextureWidth();
vertex[2].texCoord.y = vertex[3].texCoord.y = (float) pTexture->GetHeight() / pTexture->GetTextureHeight();
}
else
{
vertex[1].texCoord.x = vertex[2].texCoord.x = 1.0f;
vertex[2].texCoord.y = vertex[3].texCoord.y = 1.0f;
}
vertex[4] = vertex[0]; // Not used when pTexture != NULL
CGUIShaderDX* pGUIShader = DX::Windowing()->GetGUIShader();
pGUIShader->Begin(SHADER_METHOD_RENDER_TEXTURE_BLEND);
// Set state to render the image
if (pTexture)
{
pTexture->LoadToGPU();
CDXTexture* dxTexture = reinterpret_cast<CDXTexture*>(pTexture);
ID3D11ShaderResourceView* shaderRes = dxTexture->GetShaderResource();
pGUIShader->SetShaderViews(1, &shaderRes);
pGUIShader->DrawQuad(vertex[0], vertex[1], vertex[2], vertex[3]);
}
else
{
if (!UpdateVertexBuffer(vertex))
return;
ComPtr<ID3D11DeviceContext> pContext = DX::DeviceResources::Get()->GetD3DContext();
unsigned stride = sizeof(Vertex);
unsigned offset = 0;
pContext->IASetVertexBuffers(0, 1, m_vb.GetAddressOf(), &stride, &offset);
pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP);
pGUIShader->Draw(5, 0);
pGUIShader->RestoreBuffers();
}
#elif defined(HAS_GL)
CRenderSystemGL *renderSystem = dynamic_cast<CRenderSystemGL*>(CServiceBroker::GetRenderSystem());
if (pTexture)
{
pTexture->LoadToGPU();
pTexture->BindToUnit(0);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
renderSystem->EnableShader(SM_TEXTURE);
}
else
{
renderSystem->EnableShader(SM_DEFAULT);
}
float u1 = 0, u2 = 1, v1 = 0, v2 = 1;
if (pTexture)
{
u2 = (float)pTexture->GetWidth() / pTexture->GetTextureWidth();
v2 = (float)pTexture->GetHeight() / pTexture->GetTextureHeight();
}
GLubyte colour[4];
GLubyte idx[4] = {0, 1, 3, 2}; //determines order of the vertices
GLuint vertexVBO;
GLuint indexVBO;
struct PackedVertex
{
float x, y, z;
float u1, v1;
} vertex[4];
// Setup vertex position values
vertex[0].x = x[0];
vertex[0].y = y[0];
vertex[0].z = 0;
vertex[0].u1 = u1;
vertex[0].v1 = v1;
vertex[1].x = x[1];
vertex[1].y = y[1];
vertex[1].z = 0;
vertex[1].u1 = u2;
vertex[1].v1 = v1;
vertex[2].x = x[2];
//.........这里部分代码省略.........
示例4: Render
void CSlideShowPic::Render(float *x, float *y, CBaseTexture* pTexture, color_t color)
{
#ifdef HAS_DX
static const DWORD FVF_VERTEX = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;
Vertex vertex[5];
for (int i = 0; i < 4; i++)
{
vertex[i].pos = XMFLOAT3( x[i], y[i], 0);
CD3DHelper::XMStoreColor(&vertex[i].color, color);
vertex[i].texCoord = XMFLOAT2(0.0f, 0.0f);
vertex[i].texCoord2 = XMFLOAT2(0.0f, 0.0f);
}
if (pTexture)
{
vertex[1].texCoord.x = vertex[2].texCoord.x = (float) pTexture->GetWidth() / pTexture->GetTextureWidth();
vertex[2].texCoord.y = vertex[3].texCoord.y = (float) pTexture->GetHeight() / pTexture->GetTextureHeight();
}
else
{
vertex[1].texCoord.x = vertex[2].texCoord.x = 1.0f;
vertex[2].texCoord.y = vertex[3].texCoord.y = 1.0f;
}
vertex[4] = vertex[0]; // Not used when pTexture != NULL
CGUIShaderDX* pGUIShader = g_Windowing.GetGUIShader();
pGUIShader->Begin(SHADER_METHOD_RENDER_TEXTURE_BLEND);
// Set state to render the image
if (pTexture)
{
pTexture->LoadToGPU();
CDXTexture* dxTexture = reinterpret_cast<CDXTexture*>(pTexture);
ID3D11ShaderResourceView* shaderRes = dxTexture->GetShaderResource();
pGUIShader->SetShaderViews(1, &shaderRes);
pGUIShader->DrawQuad(vertex[0], vertex[1], vertex[2], vertex[3]);
}
else
{
if (!UpdateVertexBuffer(vertex))
return;
ID3D11DeviceContext* pContext = g_Windowing.Get3D11Context();
unsigned stride = sizeof(Vertex);
unsigned offset = 0;
pContext->IASetVertexBuffers(0, 1, &m_vb, &stride, &offset);
pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP);
pGUIShader->Draw(5, 0);
pGUIShader->RestoreBuffers();
}
#elif defined(HAS_GL)
if (pTexture)
{
int unit = 0;
pTexture->LoadToGPU();
pTexture->BindToUnit(unit++);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND); // Turn Blending On
// diffuse coloring
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE0);
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR);
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
if(g_Windowing.UseLimitedColor())
{
// compress range
pTexture->BindToUnit(unit++); // dummy bind
const GLfloat rgba1[4] = {(235.0 - 16.0f) / 255.0f, (235.0 - 16.0f) / 255.0f, (235.0 - 16.0f) / 255.0f, 1.0f};
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_COMBINE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba1);
glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB , GL_MODULATE);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB , GL_PREVIOUS);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE1_RGB , GL_CONSTANT);
glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB , GL_SRC_COLOR);
glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_RGB , GL_SRC_COLOR);
glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA , GL_REPLACE);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_ALPHA , GL_PREVIOUS);
// transition
pTexture->BindToUnit(unit++); // dummy bind
const GLfloat rgba2[4] = {16.0f / 255.0f, 16.0f / 255.0f, 16.0f / 255.0f, 0.0f};
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_COMBINE);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba2);
glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_RGB , GL_ADD);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_RGB , GL_PREVIOUS);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE1_RGB , GL_CONSTANT);
glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND0_RGB , GL_SRC_COLOR);
glTexEnvi (GL_TEXTURE_ENV, GL_OPERAND1_RGB , GL_SRC_COLOR);
glTexEnvi (GL_TEXTURE_ENV, GL_COMBINE_ALPHA , GL_REPLACE);
glTexEnvi (GL_TEXTURE_ENV, GL_SOURCE0_ALPHA , GL_PREVIOUS);
}
//.........这里部分代码省略.........