0

试图在 xcode 中编译一个 unity3d 项目,但我在下面的函数中得到以下编译错误。有人知道是什么原因吗?

使用 Xcode 4,SDK 4.3 和 Unity 3.3 Base SDK 设置为 4.3,Unity 中的 SDK 版本设置为 4.2,目标 iOS 为 3.2

AppController.mm:710:错误:“。”之前的预期初始化程序 令牌

AppController.mm:错误:解析问题:函数声明符后的预期函数体

   void PresentContext_UnityCallback(struct UnityFrameStats const* unityFrameStats)
    {   
    #if ENABLE_INTERNAL_PROFILER
        _unityFrameStats = *unityFrameStats;

        if (_frameId % BLOCK_ON_GPU_EACH_NTH_FRAME == (BLOCK_ON_GPU_EACH_NTH_FRAME-1))
        {
            Prof_Int64 gpuTime0 = mach_absolute_time();

    #if ENABLE_BLOCK_ON_GPU_PROFILER
            UnityFinishRendering();
    #endif

            Prof_Int64 gpuTime1 = mach_absolute_time();
            _gpuDelta = gpuTime1 - gpuTime0;
        }
        else
            _gpuDelta = 0;
    #endif


    #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 swapTime0 = mach_absolute_time();
    #endif

        PresentSurface(_surface);

    #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 vblankTime = mach_absolute_time();

        if (_lastVBlankTime < 0) _lastVBlankTime = vblankTime;
        _frameDelta = vblankTime - _lastVBlankTime; _lastVBlankTime = vblankTime;

        Prof_Int64 swapTime1 = vblankTime;
        _swapDelta = swapTime1 - swapTime0;
    #endif
    }

上述函数之前的代码如下:

void PresentSurface(MyEAGLSurface& surface)
{
    UNITY_DBG_LOG ("PresentSurface:\n");
    EAGLContext *oldContext = [EAGLContext currentContext];

    if (oldContext != _context)
        [EAGLContext setCurrentContext:_context];

#if GL_APPLE_framebuffer_multisample
    if (surface.msaaSamples > 0 && _supportsMSAA)
    {
        UnityStartProfilerCounter(msaaResolveCounter);
        #if ENABLE_INTERNAL_PROFILER
        Prof_Int64 msaaTime0 = mach_absolute_time();
        #endif

        UNITY_DBG_LOG ("  ResolveMSAA: samples=%i msaaFBO=%i destFBO=%i\n", surface.msaaSamples, surface.msaaFramebuffer, surface.framebuffer);
        glBindFramebufferOES(GL_READ_FRAMEBUFFER_APPLE, surface.msaaFramebuffer); 
        glBindFramebufferOES(GL_DRAW_FRAMEBUFFER_APPLE, surface.framebuffer);

        glResolveMultisampleFramebufferAPPLE();
        CHECK_GL_ERROR();

        #if ENABLE_INTERNAL_PROFILER
        _msaaResolve += (mach_absolute_time() - msaaTime0);
        #endif
        UnityEndProfilerCounter(msaaResolveCounter);
    }
#endif

#if GL_EXT_discard_framebuffer
    if (_supportsDiscard)
    {
        GLenum attachments[3];
        int discardCount = 0;
        if (surface.msaaSamples > 1 && _supportsMSAA)
            attachments[discardCount++] = GL_COLOR_ATTACHMENT0_OES;

        if (surface.depthFormat)
            attachments[discardCount++] = GL_DEPTH_ATTACHMENT_OES;

        attachments[discardCount++] = GL_STENCIL_ATTACHMENT_OES;

        GLenum target = (surface.msaaSamples > 1 && _supportsMSAA)? GL_READ_FRAMEBUFFER_APPLE: GL_FRAMEBUFFER_OES;
        if (discardCount > 0)
            glDiscardFramebufferEXT(target, discardCount, attachments);
    }
#endif

    CHECK_GL_ERROR();

    // presentRenderbuffer presents currently bound RB, so make sure we have the correct one bound
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, surface.renderbuffer);   
    if(![_context presentRenderbuffer:GL_RENDERBUFFER_OES])
        EAGL_ERROR("swap renderbuffer");

#if GL_APPLE_framebuffer_multisample
    if (_supportsMSAA)
    {
        const int desiredMSAASamples = UnityGetDesiredMSAASampleCount(MSAA_DEFAULT_SAMPLE_COUNT);   
        if (surface.msaaSamples != desiredMSAASamples)
        {
            surface.msaaSamples = desiredMSAASamples;
            CreateSurfaceMultisampleBuffers(&surface);
            glBindRenderbufferOES(GL_RENDERBUFFER_OES, surface.renderbuffer);
        }

        if (surface.msaaSamples > 1)
        {
            glBindFramebufferOES(GL_FRAMEBUFFER_OES, surface.msaaFramebuffer);
            gDefaultFBO = surface.msaaFramebuffer;
            UNITY_DBG_LOG ("  glBindFramebufferOES (GL_FRAMEBUFFER_OES, %i); // PresentSurface\n", surface.msaaFramebuffer);
        }
    }
#endif

    if(oldContext != _context)
        [EAGLContext setCurrentContext:oldContext];
}
4

3 回答 3

0

Oke 发现问题本质上存在于 Unity 3.3 中。但是,通过进入 iOS 的播放器设置并将 tagrt SDK 的值从“4.2”重新调整为“自 4.2 以来的最新”,这很容易解决

于 2011-04-11T09:44:08.823 回答
0

我刚刚删除了变量前面的 & ......现在我可以 buld

于 2011-10-28T19:34:45.317 回答
0

将以下两行添加到我的 Prefix.pch

#define __IPHONE_OS_VERSION_MAX_ALLOWED   __IPHONE_4_2
#define __IPHONE_OS_VERSION_MIN_REQUIRED  __IPHONE_3_0
于 2013-05-17T12:04:28.880 回答