【发布时间】:2011-04-09 18:08:18
【问题描述】:
尝试在 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];
}
【问题讨论】:
-
没有'.'您发布的 sn-p 中的令牌(第一个错误),因此这表明这是一个后续错误,问题出在 您引用的代码之前。
-
我修改了代码,但 #if 语句破坏了布局。
-
@Zophiel。请修正您的代码格式。
#if语句“破坏”你的布局的原因是它们没有完全缩进。请参阅daringfireball.net/projects/markdown/syntax#precode 以获取更多参考。 -
@Jonathan 谢谢你的链接,我用正确的格式修改了帖子并提供了更多信息。
-
问题并没有跳出页面,使用各种
#ifdefs 和宏很难看出语法错误的地方。通过预处理器运行文件并从报告错误的点开始向后工作。
标签: objective-c xcode ios unity3d