本文整理汇总了C++中VertexFormat::SetStride方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexFormat::SetStride方法的具体用法?C++ VertexFormat::SetStride怎么用?C++ VertexFormat::SetStride使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexFormat
的用法示例。
在下文中一共展示了VertexFormat::SetStride方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
const unsigned int ResourceManagerDX9::CreateVertexFormat(
const unsigned int attributeCount, const VertexAttributeUsage usage,
const VertexAttributeType type, const unsigned int usageIdx, ...)
{
VertexFormat* vf = new VertexFormatDX9(attributeCount);
unsigned int offset = 0;
vf->SetAttribute(0, offset, usage, type, usageIdx);
offset += VertexFormat::GetAttributeTypeSize(type);
va_list args;
va_start(args, usageIdx);
for (unsigned int i = 1, n = vf->GetAttributeCount(); i < n; i++)
{
VertexAttributeUsage tempUsage = va_arg(args, VertexAttributeUsage);
VertexAttributeType tempType = va_arg(args, VertexAttributeType);
unsigned int tempUsageIdx = va_arg(args, unsigned int);
vf->SetAttribute(i, offset, tempUsage, tempType, tempUsageIdx);
offset += VertexFormat::GetAttributeTypeSize(tempType);
}
va_end(args);
vf->SetStride(offset);
m_arrVertexFormat.push_back(vf);
return (unsigned int)m_arrVertexFormat.size() - 1;
}
示例2: LoadVertexFormat
//----------------------------------------------------------------------------
VertexFormat* Visual::LoadVertexFormat (FileIO& inFile)
{
int numAttributes;
inFile.Read(sizeof(int), &numAttributes);
VertexFormat* vformat = new0 VertexFormat(numAttributes);
for (int i = 0; i < numAttributes; ++i)
{
unsigned int streamIndex, offset, usageIndex;
int type, usage;
inFile.Read(sizeof(unsigned int), &streamIndex);
inFile.Read(sizeof(unsigned int), &offset);
inFile.Read(sizeof(int), &type);
inFile.Read(sizeof(int), &usage);
inFile.Read(sizeof(unsigned int), &usageIndex);
vformat->SetAttribute(i, streamIndex, offset,
(VertexFormat::AttributeType)type,
(VertexFormat::AttributeUsage)usage, usageIndex);
}
int stride;
inFile.Read(sizeof(int), &stride);
vformat->SetStride(stride);
return vformat;
}
示例3: Create
//----------------------------------------------------------------------------
VertexFormat* VertexFormat::Create (int numAttributes, ...)
{
VertexFormat* vformat = new0 VertexFormat(numAttributes);
va_list arguments;
va_start(arguments, numAttributes);
unsigned int offset = 0;
for (int i = 0; i < numAttributes; ++i)
{
int usage = va_arg(arguments, int);
int type = va_arg(arguments, int);
unsigned int usageIndex = va_arg(arguments, unsigned int);
vformat->SetAttribute(i, 0, offset, (AttributeType)type,
(AttributeUsage)usage, usageIndex);
offset += msTypeSize[type];
}
vformat->SetStride((int)offset);
va_end(arguments);
return vformat;
}
示例4: vba
//----------------------------------------------------------------------------
ImageProcessing::ImageProcessing (int numCols, int numRows, int numTargets)
:
mNumCols(numCols),
mNumRows(numRows),
mNumTargets(numTargets)
{
assertion(mNumCols > 1 && mNumRows > 0, "Invalid bound.\n");
assertion(mNumTargets > 0, "Invalid number of targets.\n");
mColSpacing = 1.0f/(float)(mNumCols - 1);
mRowSpacing = 1.0f/(float)(mNumRows - 1);
// 将相机从[-1,-1]^2 x [0,1]匹配到[0,1]^3
mCamera = new0 Camera(false);
mCamera->SetFrustum(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
mCamera->SetFrame(APoint::ORIGIN, AVector::UNIT_Z, AVector::UNIT_Y,
AVector::UNIT_X);
// 创建顶点格式
VertexFormat* vformat = new0 VertexFormat(2);
vformat->SetAttribute(0, 0, 0, VertexFormat::AT_FLOAT3,
VertexFormat::AU_POSITION, 0);
vformat->SetAttribute(1, 0, 3*sizeof(float), VertexFormat::AT_FLOAT2,
VertexFormat::AU_TEXCOORD, 0);
vformat->SetStride(5*sizeof(float));
// 创建顶点缓冲区
int vstride = vformat->GetStride();
VertexBuffer* vbuffer = new0 VertexBuffer(4, vstride);
VertexBufferAccessor vba(vformat, vbuffer);
float xmin, xmax, ymin, ymax;
Float2 tc0, tc1, tc2, tc3;
if (VertexShader::GetProfile() == VertexShader::VP_ARBVP1)
{
xmin = 0.0f;
xmax = 1.0f;
ymin = 0.0f;
ymax = 1.0f;
tc0 = Float2(0.0f, 0.0f);
tc1 = Float2(1.0f, 0.0f);
tc2 = Float2(1.0f, 1.0f);
tc3 = Float2(0.0f, 1.0f);
}
else
{
xmin = -0.5f*mColSpacing;
xmax = 1.0f - 0.5f*mColSpacing;
ymin = +0.5f*mRowSpacing;
ymax = 1.0f + 0.5f*mRowSpacing;
tc0 = Float2(0.0f, 1.0f);
tc1 = Float2(1.0f, 1.0f);
tc2 = Float2(1.0f, 0.0f);
tc3 = Float2(0.0f, 0.0f);
}
vba.Position<Float3>(0) = Float3(xmin, ymin, 0.0f);
vba.Position<Float3>(1) = Float3(xmax, ymin, 0.0f);
vba.Position<Float3>(2) = Float3(xmax, ymax, 0.0f);
vba.Position<Float3>(3) = Float3(xmin, ymax, 0.0f);
vba.TCoord<Float2>(0, 0) = tc0;
vba.TCoord<Float2>(0, 1) = tc1;
vba.TCoord<Float2>(0, 2) = tc2;
vba.TCoord<Float2>(0, 3) = tc3;
// 创建顶点索引缓冲区
IndexBuffer* ibuffer = new0 IndexBuffer(6, sizeof(int));
int* indices = (int*)ibuffer->GetData();
indices[0] = 0; indices[1] = 1; indices[2] = 2;
indices[3] = 0; indices[4] = 2; indices[5] = 3;
// 创建网格
mRectangle = new0 TriMesh(vformat, vbuffer, ibuffer);
// 创建顶点着色器
CreateVertexShader();
// 创建RT
mTargets = new1<RenderTargetPtr>(mNumTargets);
for (int i = 0; i < mNumTargets; ++i)
{
mTargets[i] = new0 RenderTarget(1, Texture::TF_A32B32G32R32F,
mNumCols, mNumRows, false, false, false);
}
}