diff --git a/KREngine/kraken/KRCamera.cpp b/KREngine/kraken/KRCamera.cpp index be547db..b30e209 100644 --- a/KREngine/kraken/KRCamera.cpp +++ b/KREngine/kraken/KRCamera.cpp @@ -60,16 +60,19 @@ KRCamera::~KRCamera() { void KRCamera::renderFrame(float deltaTime) { + GLint defaultFBO; + GLDEBUG(glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO)); + createBuffers(); KRScene &scene = getScene(); + KRMat4 viewMatrix = KRMat4::Invert(getModelMatrix()); getContext().getAudioManager()->setViewMatrix(viewMatrix); // FINDME, TODO - Should we support de-coupling the audio listener location from the camera? - GLint defaultFBO; - GLDEBUG(glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO)); + settings.setViewportSize(KRVector2(backingWidth, backingHeight)); KRMat4 projectionMatrix; @@ -391,7 +394,6 @@ void KRCamera::renderFrame(float deltaTime) GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO)); renderPost(); - } @@ -402,8 +404,8 @@ void KRCamera::createBuffers() { GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &renderBufferWidth)); GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &renderBufferHeight)); #else - renderBufferWidth = 576; // FINDME - HACK for OSX - renderBufferHeight = 374; + renderBufferWidth = 1920; // FINDME - HACK for OSX + renderBufferHeight = 1200; #endif if(renderBufferWidth != backingWidth || renderBufferHeight != backingHeight) { @@ -476,6 +478,7 @@ void KRCamera::createBuffers() { GLDEBUG(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, backingWidth, backingHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL)); GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, lightAccumulationTexture, 0)); } + int targetVolumetricBufferWidth = 0; int targetVolumetricBufferHeight = 0; if(settings.volumetric_environment_enable && settings.volumetric_environment_downsample != 0) { @@ -498,6 +501,7 @@ void KRCamera::createBuffers() { volumetricLightAccumulationBuffer = 0; } + if(targetVolumetricBufferWidth != 0 && targetVolumetricBufferHeight != 0) { // ===== Create offscreen compositing framebuffer object for volumetric lighting ===== GLDEBUG(glGenFramebuffers(1, &volumetricLightAccumulationBuffer)); diff --git a/KREngine/kraken/KREngine.mm b/KREngine/kraken/KREngine.mm index 790984e..210db1f 100644 --- a/KREngine/kraken/KREngine.mm +++ b/KREngine/kraken/KREngine.mm @@ -71,6 +71,7 @@ using namespace std; BOOL isRetina = false; #endif +#if TARGET_OS_IPHONE if(isIpad && isRetina) { KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; KRContext::KRENGINE_MAX_VBO_MEM = 128000000 * 2; @@ -94,6 +95,18 @@ using namespace std; KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; KRContext::KRENGINE_MAX_TEXTURE_THROUGHPUT = 32000000; } +#else + KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; + KRContext::KRENGINE_MAX_VBO_MEM = 256000000; + KRContext::KRENGINE_MAX_SHADER_HANDLES = 100; + KRContext::KRENGINE_MAX_TEXTURE_HANDLES = 10000; + KRContext::KRENGINE_MAX_TEXTURE_MEM = 256000000; + KRContext::KRENGINE_TARGET_TEXTURE_MEM_MAX = 192000000; + KRContext::KRENGINE_TARGET_TEXTURE_MEM_MIN = 96000000; + KRContext::KRENGINE_MAX_TEXTURE_DIM = 2048; + KRContext::KRENGINE_MIN_TEXTURE_DIM = 64; + KRContext::KRENGINE_MAX_TEXTURE_THROUGHPUT = 32000000; +#endif _context = NULL; if ((self = [super init])) { @@ -168,12 +181,13 @@ using namespace std; - (BOOL)loadShaders { #if TARGET_OS_IPHONE - NSString *bundleName = @"kraken_standard_assets_ios.bundle"; + NSString *bundleName = @"kraken_standard_assets_ios"; #else - NSString *bundleName = @"kraken_standard_assets_osx.bundle"; + NSString *bundleName = @"kraken_standard_assets_osx"; #endif - NSString *bundlePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:bundleName]; +// NSString *bundlePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:bundleName]; + NSString *bundlePath = [[NSBundle mainBundle] pathForResource:bundleName ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; if(bundle == nil) { NSLog(@"ERROR - Standard asset bundle could not be found."); diff --git a/KREngine/kraken/KRLight.cpp b/KREngine/kraken/KRLight.cpp index ca3b7f4..6e96cef 100644 --- a/KREngine/kraken/KRLight.cpp +++ b/KREngine/kraken/KRLight.cpp @@ -259,7 +259,11 @@ void KRLight::render(KRCamera *pCamera, std::vector &lights, const KR if(getContext().getShaderManager()->selectShader("occlusion_test", *pCamera, lights, 0, viewport, occlusion_test_sphere_matrix, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass)) { GLDEBUG(glGenQueriesEXT(1, &m_occlusionQuery)); +#if TARGET_OS_IPHONE GLDEBUG(glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, m_occlusionQuery)); +#else + GLDEBUG(glBeginQuery(GL_SAMPLES_PASSED, m_occlusionQuery)); +#endif std::vector sphereModels = getContext().getModelManager()->getModel("__sphere"); if(sphereModels.size()) { @@ -268,7 +272,11 @@ void KRLight::render(KRCamera *pCamera, std::vector &lights, const KR } } +#if TARGET_OS_IPHONE GLDEBUG(glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT)); +#else + GLDEBUG(glEndQuery(GL_SAMPLES_PASSED)); +#endif } } diff --git a/KREngine/kraken/KROctreeNode.cpp b/KREngine/kraken/KROctreeNode.cpp index 5928997..e71c6c0 100644 --- a/KREngine/kraken/KROctreeNode.cpp +++ b/KREngine/kraken/KROctreeNode.cpp @@ -48,7 +48,11 @@ void KROctreeNode::beginOcclusionQuery() { if(!m_occlusionTested){ GLDEBUG(glGenQueriesEXT(1, &m_occlusionQuery)); +#if TARGET_OS_IPHONE GLDEBUG(glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, m_occlusionQuery)); +#else + GLDEBUG(glBeginQuery(GL_SAMPLES_PASSED, m_occlusionQuery)); +#endif m_occlusionTested = true; m_activeQuery = true; } @@ -58,7 +62,11 @@ void KROctreeNode::endOcclusionQuery() { if(m_activeQuery) { // Only end a query if we started one +#if TARGET_OS_IPHONE GLDEBUG(glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT)); +#else + GLDEBUG(glEndQuery(GL_SAMPLES_PASSED)); +#endif } } diff --git a/KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh b/KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh index b6cdef4..0c38606 100644 --- a/KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh +++ b/KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh @@ -25,7 +25,7 @@ // or implied, of Kearwood Gilbert. // -#extension GL_EXT_shadow_samplers : require +//#extension GL_EXT_shadow_samplers : require #if FOG_TYPE > 0 // FOG_TYPE 1 - Linear diff --git a/KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh b/KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh index 468a31e..039a636 100644 --- a/KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh +++ b/KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh @@ -29,7 +29,7 @@ // or implied, of Kearwood Gilbert. // -#extension GL_EXT_shadow_samplers : require +//#extension GL_EXT_shadow_samplers : require varying mediump vec2 texCoord; @@ -39,5 +39,5 @@ uniform mediump vec3 light_color; varying lowp float intensity_modulate; void main() { - gl_FragColor = vec4(light_color, 1.0) * shadow2DProjEXT(shadowTexture1, shadowMapCoord1) * max(1.0 - texCoord.x*texCoord.x-texCoord.y*texCoord.y, 0.0) * intensity_modulate; + gl_FragColor = vec4(light_color, 1.0) * shadow2DProj(shadowTexture1, shadowMapCoord1) * max(1.0 - texCoord.x*texCoord.x-texCoord.y*texCoord.y, 0.0) * intensity_modulate; } \ No newline at end of file diff --git a/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh b/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh index aca802c..8e1f7ee 100644 --- a/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh +++ b/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh @@ -25,8 +25,6 @@ // or implied, of Kearwood Gilbert. // -#extension GL_EXT_shadow_samplers : require - varying mediump vec4 shadowMapCoord1; uniform sampler2DShadow shadowTexture1; uniform lowp sampler2D depthFrame; @@ -37,5 +35,5 @@ void main() { if(gl_FragCoord.z > texture2D(depthFrame, vec2(gl_FragCoord.xy / viewport.zw)).r) discard; - gl_FragColor = vec4(light_color, 1.0) * shadow2DProjEXT(shadowTexture1, shadowMapCoord1); + gl_FragColor = vec4(light_color, 1.0) * shadow2DProj(shadowTexture1, shadowMapCoord1); } diff --git a/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh b/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh index 247bedb..ec1112f 100644 --- a/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh +++ b/KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh @@ -25,13 +25,11 @@ // or implied, of Kearwood Gilbert. // -#extension GL_EXT_shadow_samplers : require - varying mediump vec4 shadowMapCoord1; uniform sampler2DShadow shadowTexture1; uniform mediump vec3 light_color; void main() { - gl_FragColor = vec4(light_color, 1.0) * shadow2DProjEXT(shadowTexture1, shadowMapCoord1); + gl_FragColor = vec4(light_color, 1.0) * shadow2DProj(shadowTexture1, shadowMapCoord1); }