这个 C++ 函数声明是什么
What is this C++ Function Declaration
我是 C++ 的新手,我在文档上的工作告诉我只看示例代码,它没有解释任何东西,所以我试图破译它。
我看到了这个函数声明,但我不完全理解它。
只是第一个函数
我在 MHWRender::MPxShaderOverride(obj) 之后得到了我没有得到的部分,然后它开始作为参数列表(或者我不知道它叫什么)
我想我会在哪里找到指定的输入。
同样,我不知道这是在做什么,所以我有点不知道如何解释它。
完整代码可以在这里找到:
http://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__cpp_ref_hw_phong_shader_2hw_phong_shader_8cpp_example_html
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
// override blend state when there is blending
static const MHWRender::MBlendState *sBlendState;
// Current hwPhongShader node associated with the shader override.
// Updated during doDG() time.
hwPhongShader *fShaderNode;
// Shader inputs values including transparency
float fTransparency;
float fAmbient[3];
float fDiffuse[4];
float fSpecular[3];
float fShininess[3];
// Temporary system buffer for creating textures
unsigned char* fTextureData;
// Pass tracking
bool fInColorPass;
bool fInShadowPass;
// Draw with texture or shader flag
bool fDrawUsingShader;
// VP2 texture
MHWRender::MTexture *fTexture;
// VP2 color shader
MHWRender::MShaderInstance *fColorShaderInstance;
// VP2 shadow shader
MHWRender::MShaderInstance *fShadowShaderInstance;
mutable bool fShaderBound;
下面是一个构造函数。
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
它使用 initializer list 通过调用其构造函数来初始化其成员变量。 hwPhongShaderOverride
继承自 MHWRender::MPxShaderOverride
,因此它调用 MHWRender::MPxShaderOverride
的构造函数作为初始化列表中的第一个元素(即 MHWRender::MPxShaderOverride(obj)
.
您可以切换 fDrawUsingShader
以创建着色器的实例(如构造函数的主体所示)。之后,它将一些初始值添加到四个数组 fAmbient
、fDiffuse
、fSpecular
和 fShininess
.
这是一个class构造函数。 class被命名为hwPhongShaderOverrideMObject
,它派生自MHWRender::MPxShaderOverride
,例如:
class hwPhongShaderOverrideMObject : public MHWRender::MPxShaderOverride
{
...
};
hwPhongShaderOverride(const MObject& obj)
指定此构造函数将一个参数作为输入,即对 MObject
实例的常量引用。构造函数是在 class 声明本身内联声明和实现的,而不是与其声明分开实现的。 C++ 中允许这两种方法。
:
和 {
之间的所有内容都是构造函数的 初始化列表 。它初始化 class.
的成员
:
开始初始化列表。
MHWRender::MPxShaderOverride(obj)
将输入对象传递给基础 class 构造函数。基础 classes 必须始终首先构建。
, fShaderNode(NULL)
正在将 fShaderNode
成员初始化为 NULL。
, fTextureData(NULL)
正在将 fTextureData
成员初始化为 NULL。
依此类推,直到{
结束初始化列表。然后进入构造函数的 body ,像任何其他函数一样,在 class 成员首先被初始化之后。
我是 C++ 的新手,我在文档上的工作告诉我只看示例代码,它没有解释任何东西,所以我试图破译它。
我看到了这个函数声明,但我不完全理解它。
只是第一个函数
我在 MHWRender::MPxShaderOverride(obj) 之后得到了我没有得到的部分,然后它开始作为参数列表(或者我不知道它叫什么)
我想我会在哪里找到指定的输入。
同样,我不知道这是在做什么,所以我有点不知道如何解释它。
完整代码可以在这里找到: http://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__cpp_ref_hw_phong_shader_2hw_phong_shader_8cpp_example_html
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
// override blend state when there is blending
static const MHWRender::MBlendState *sBlendState;
// Current hwPhongShader node associated with the shader override.
// Updated during doDG() time.
hwPhongShader *fShaderNode;
// Shader inputs values including transparency
float fTransparency;
float fAmbient[3];
float fDiffuse[4];
float fSpecular[3];
float fShininess[3];
// Temporary system buffer for creating textures
unsigned char* fTextureData;
// Pass tracking
bool fInColorPass;
bool fInShadowPass;
// Draw with texture or shader flag
bool fDrawUsingShader;
// VP2 texture
MHWRender::MTexture *fTexture;
// VP2 color shader
MHWRender::MShaderInstance *fColorShaderInstance;
// VP2 shadow shader
MHWRender::MShaderInstance *fShadowShaderInstance;
mutable bool fShaderBound;
下面是一个构造函数。
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
它使用 initializer list 通过调用其构造函数来初始化其成员变量。 hwPhongShaderOverride
继承自 MHWRender::MPxShaderOverride
,因此它调用 MHWRender::MPxShaderOverride
的构造函数作为初始化列表中的第一个元素(即 MHWRender::MPxShaderOverride(obj)
.
您可以切换 fDrawUsingShader
以创建着色器的实例(如构造函数的主体所示)。之后,它将一些初始值添加到四个数组 fAmbient
、fDiffuse
、fSpecular
和 fShininess
.
这是一个class构造函数。 class被命名为hwPhongShaderOverrideMObject
,它派生自MHWRender::MPxShaderOverride
,例如:
class hwPhongShaderOverrideMObject : public MHWRender::MPxShaderOverride
{
...
};
hwPhongShaderOverride(const MObject& obj)
指定此构造函数将一个参数作为输入,即对 MObject
实例的常量引用。构造函数是在 class 声明本身内联声明和实现的,而不是与其声明分开实现的。 C++ 中允许这两种方法。
:
和 {
之间的所有内容都是构造函数的 初始化列表 。它初始化 class.
:
开始初始化列表。
MHWRender::MPxShaderOverride(obj)
将输入对象传递给基础 class 构造函数。基础 classes 必须始终首先构建。
, fShaderNode(NULL)
正在将 fShaderNode
成员初始化为 NULL。
, fTextureData(NULL)
正在将 fTextureData
成员初始化为 NULL。
依此类推,直到{
结束初始化列表。然后进入构造函数的 body ,像任何其他函数一样,在 class 成员首先被初始化之后。