这个问题对您来说可能看起来很愚蠢,但我找不到答案,因此我想确保它能按照我的想法工作。

最近,我遇到了以下代码:

void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
    Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
    Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
    Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;

    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
    }
}


我了解0.0039215689f(即1/255)出于优化原因而被硬编码。
现在想象我要定义它
出于可读性考虑(即使此处选择的名称不是更好,也仅用于示例)。

#define PIXEL_VALUE 0.0039215689f

void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * PIXEL_VALUE;
    Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * PIXEL_VALUE;
    Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * PIXEL_VALUE;
    Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * PIXEL_VALUE;

    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
    }
}


这样定义会使代码执行速度变慢吗?

最佳答案

这样定义会使代码执行速度变慢吗?


不可以,因为这两个代码段相同,因为在编译转换单元之前会扩展MACROS。

10-01 19:11