this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added support for non-core FBOs (EXT for GL 2- and OES for GLES 1.1). Thanks Vitaly!

+95 -28
+1
include/SDL_gpu.h
··· 442 442 static const GPU_FeatureEnum GPU_FEATURE_PIXEL_SHADER = 0x200; 443 443 static const GPU_FeatureEnum GPU_FEATURE_GEOMETRY_SHADER = 0x400; 444 444 static const GPU_FeatureEnum GPU_FEATURE_WRAP_REPEAT_MIRRORED = 0x800; 445 + static const GPU_FeatureEnum GPU_FEATURE_CORE_FRAMEBUFFER_OBJECTS = 0x1000; 445 446 446 447 /*! Combined feature flags */ 447 448 #define GPU_FEATURE_ALL_BASE GPU_FEATURE_RENDER_TARGETS
+1
src/renderer_GLES_2.c
··· 19 19 20 20 #define SDL_GPU_USE_BUFFER_PIPELINE 21 21 #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 22 + #define SDL_GPU_ASSUME_CORE_FBO 22 23 #define SDL_GPU_ASSUME_SHADERS 23 24 #define SDL_GPU_DISABLE_TEXTURE_GETS 24 25 #define SDL_GPU_NO_VAO
+1
src/renderer_GLES_3.c
··· 20 20 #define SDL_GPU_USE_BUFFER_PIPELINE 21 21 #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 22 22 #define SDL_GPU_ASSUME_SHADERS 23 + #define SDL_GPU_ASSUME_CORE_FBO 23 24 // TODO: Make this dynamic because GLES 3.1 supports it 24 25 #define SDL_GPU_DISABLE_TEXTURE_GETS 25 26
+90 -28
src/renderer_GL_common.inl
··· 355 355 #endif 356 356 } 357 357 358 + // Define intermediates for FBO functions in case we only have EXT or OES FBO support. 359 + #if defined(SDL_GPU_ASSUME_CORE_FBO) 360 + #define glBindFramebufferPROC glBindFramebuffer 361 + #define glCheckFramebufferStatusPROC glCheckFramebufferStatus 362 + #define glDeleteFramebuffersPROC glDeleteFramebuffers 363 + #define glFramebufferTexture2DPROC glFramebufferTexture2D 364 + #define glGenFramebuffersPROC glGenFramebuffers 365 + #define glGenerateMipmapPROC glGenerateMipmap 366 + #else 367 + static void GLAPIENTRY glBindFramebufferNOOP(GLenum target, GLuint framebuffer) 368 + { 369 + GPU_LogError("%s: Unsupported operation\n", __func__); 370 + } 371 + static GLenum GLAPIENTRY glCheckFramebufferStatusNOOP(GLenum target) 372 + { 373 + GPU_LogError("%s: Unsupported operation\n", __func__); 374 + return 0; 375 + } 376 + static void GLAPIENTRY glDeleteFramebuffersNOOP(GLsizei n, const GLuint* framebuffers) 377 + { 378 + GPU_LogError("%s: Unsupported operation\n", __func__); 379 + } 380 + static void GLAPIENTRY glFramebufferTexture2DNOOP(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) 381 + { 382 + GPU_LogError("%s: Unsupported operation\n", __func__); 383 + } 384 + static void GLAPIENTRY glGenFramebuffersNOOP(GLsizei n, GLuint *ids) 385 + { 386 + GPU_LogError("%s: Unsupported operation\n", __func__); 387 + } 388 + static void GLAPIENTRY glGenerateMipmapNOOP(GLenum target) 389 + { 390 + GPU_LogError("%s: Unsupported operation\n", __func__); 391 + } 392 + 393 + static void (GLAPIENTRY *glBindFramebufferPROC)(GLenum target, GLuint framebuffer) = glBindFramebufferNOOP; 394 + static GLenum (GLAPIENTRY *glCheckFramebufferStatusPROC)(GLenum target) = glCheckFramebufferStatusNOOP; 395 + static void (GLAPIENTRY *glDeleteFramebuffersPROC)(GLsizei n, const GLuint* framebuffers) = glDeleteFramebuffersNOOP; 396 + static void (GLAPIENTRY *glFramebufferTexture2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) = glFramebufferTexture2DNOOP; 397 + static void (GLAPIENTRY *glGenFramebuffersPROC)(GLsizei n, GLuint *ids) = glGenFramebuffersNOOP; 398 + static void (GLAPIENTRY *glGenerateMipmapPROC)(GLenum target) = glGenerateMipmapNOOP; 399 + #endif 358 400 359 401 static void init_features(GPU_Renderer* renderer) 360 402 { ··· 390 432 #endif 391 433 #endif 392 434 393 - // FBO 394 - #ifdef SDL_GPU_USE_OPENGL 395 - #if SDL_GPU_GL_MAJOR_VERSION >= 3 396 - // Core in GL 3+ 435 + // FBO support 436 + #ifdef SDL_GPU_ASSUME_CORE_FBO 437 + renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 438 + renderer->enabled_features |= GPU_FEATURE_CORE_FRAMEBUFFER_OBJECTS; 439 + #elif defined(SDL_GPU_USE_OPENGL) 440 + if(isExtensionSupported("GL_ARB_framebuffer_object")) 441 + { 397 442 renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 398 - #else 399 - if(isExtensionSupported("GL_EXT_framebuffer_object")) 400 - renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 401 - else 402 - renderer->enabled_features &= ~GPU_FEATURE_RENDER_TARGETS; 403 - #endif 443 + renderer->enabled_features |= GPU_FEATURE_CORE_FRAMEBUFFER_OBJECTS; 444 + glBindFramebufferPROC = glBindFramebuffer; 445 + glCheckFramebufferStatusPROC = glCheckFramebufferStatus; 446 + glDeleteFramebuffersPROC = glDeleteFramebuffers; 447 + glFramebufferTexture2DPROC = glFramebufferTexture2D; 448 + glGenFramebuffersPROC = glGenFramebuffers; 449 + glGenerateMipmapPROC = glGenerateMipmap; 450 + } 451 + else if(isExtensionSupported("GL_EXT_framebuffer_object")) 452 + { 453 + renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 454 + glBindFramebufferPROC = glBindFramebufferEXT; 455 + glCheckFramebufferStatusPROC = glCheckFramebufferStatusEXT; 456 + glDeleteFramebuffersPROC = glDeleteFramebuffersEXT; 457 + glFramebufferTexture2DPROC = glFramebufferTexture2DEXT; 458 + glGenFramebuffersPROC = glGenFramebuffersEXT; 459 + glGenerateMipmapPROC = glGenerateMipmapEXT; 460 + } 461 + else 462 + renderer->enabled_features &= ~GPU_FEATURE_RENDER_TARGETS; 404 463 #elif defined(SDL_GPU_USE_GLES) 405 - #if SDL_GPU_GLES_MAJOR_VERSION >= 2 406 - // Core in GLES 2+ 464 + if(isExtensionSupported("GL_OES_framebuffer_object")) 465 + { 407 466 renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 408 - #else 409 - if(isExtensionSupported("GL_OES_framebuffer_object")) 410 - renderer->enabled_features |= GPU_FEATURE_RENDER_TARGETS; 411 - else 412 - renderer->enabled_features &= ~GPU_FEATURE_RENDER_TARGETS; 413 - #endif 467 + glBindFramebufferPROC = glBindFramebufferOES; 468 + glCheckFramebufferStatusPROC = glCheckFramebufferStatusOES; 469 + glDeleteFramebuffersPROC = glDeleteFramebuffersOES; 470 + glFramebufferTexture2DPROC = glFramebufferTexture2DOES; 471 + glGenFramebuffersPROC = glGenFramebuffersOES; 472 + glGenerateMipmapPROC = glGenerateMipmapOES; 473 + } 474 + else 475 + renderer->enabled_features &= ~GPU_FEATURE_RENDER_TARGETS; 414 476 #endif 415 477 416 478 // Blending ··· 507 569 static void extBindFramebuffer(GPU_Renderer* renderer, GLuint handle) 508 570 { 509 571 if(renderer->enabled_features & GPU_FEATURE_RENDER_TARGETS) 510 - glBindFramebuffer(GL_FRAMEBUFFER, handle); 572 + glBindFramebufferPROC(GL_FRAMEBUFFER, handle); 511 573 } 512 574 513 575 ··· 3396 3458 if(renderer->current_context_target != NULL) 3397 3459 flushAndClearBlitBufferIfCurrentFramebuffer(renderer, image->target); 3398 3460 if(tdata->handle != 0) 3399 - glDeleteFramebuffers(1, &tdata->handle); 3461 + glDeleteFramebuffersPROC(1, &tdata->handle); 3400 3462 tdata->handle = 0; 3401 3463 } 3402 3464 ··· 3504 3566 GPU_TARGET_DATA* tdata = (GPU_TARGET_DATA*)target->data; 3505 3567 3506 3568 // Create framebuffer object 3507 - glGenFramebuffers(1, &tdata->handle); 3569 + glGenFramebuffersPROC(1, &tdata->handle); 3508 3570 if(tdata->handle == 0) 3509 3571 { 3510 3572 GPU_PushErrorCode("GPU_ReplaceImage", GPU_ERROR_BACKEND_ERROR, "Failed to create new framebuffer target."); ··· 3514 3576 flushAndBindFramebuffer(renderer, tdata->handle); 3515 3577 3516 3578 // Attach the texture to it 3517 - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, data->handle, 0); 3579 + glFramebufferTexture2DPROC(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, data->handle, 0); 3518 3580 3519 - status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 3581 + status = glCheckFramebufferStatusPROC(GL_FRAMEBUFFER); 3520 3582 if(status != GL_FRAMEBUFFER_COMPLETE) 3521 3583 { 3522 3584 GPU_PushErrorCode("GPU_ReplaceImage", GPU_ERROR_BACKEND_ERROR, "Failed to recreate framebuffer target."); ··· 3701 3763 return NULL; 3702 3764 3703 3765 // Create framebuffer object 3704 - glGenFramebuffers(1, &handle); 3766 + glGenFramebuffersPROC(1, &handle); 3705 3767 flushAndBindFramebuffer(renderer, handle); 3706 3768 3707 3769 // Attach the texture to it 3708 - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ((GPU_IMAGE_DATA*)image->data)->handle, 0); 3770 + glFramebufferTexture2DPROC(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ((GPU_IMAGE_DATA*)image->data)->handle, 0); 3709 3771 3710 - status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 3772 + status = glCheckFramebufferStatusPROC(GL_FRAMEBUFFER); 3711 3773 if(status != GL_FRAMEBUFFER_COMPLETE) 3712 3774 return NULL; 3713 3775 ··· 3766 3828 3767 3829 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_framebuffer_handle); 3768 3830 if(data->handle != default_framebuffer_handle) 3769 - glDeleteFramebuffers(1, &data->handle); 3831 + glDeleteFramebuffersPROC(1, &data->handle); 3770 3832 } 3771 3833 3772 3834 SDL_free(data); ··· 4899 4961 if(image->target != NULL && isCurrentTarget(renderer, image->target)) 4900 4962 renderer->impl->FlushBlitBuffer(renderer); 4901 4963 bindTexture(renderer, image); 4902 - glGenerateMipmap(GL_TEXTURE_2D); 4964 + glGenerateMipmapPROC(GL_TEXTURE_2D); 4903 4965 image->has_mipmaps = GPU_TRUE; 4904 4966 4905 4967 glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &filter);
+1
src/renderer_OpenGL_3.c
··· 14 14 // Most of the code pulled in from here... 15 15 #define SDL_GPU_USE_OPENGL 16 16 #define SDL_GPU_USE_BUFFER_PIPELINE 17 + #define SDL_GPU_ASSUME_CORE_FBO 17 18 #define SDL_GPU_ASSUME_SHADERS 18 19 #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 19 20 #define SDL_GPU_SKIP_LINE_WIDTH
+1
src/renderer_OpenGL_4.c
··· 14 14 // Most of the code pulled in from here... 15 15 #define SDL_GPU_USE_OPENGL 16 16 #define SDL_GPU_USE_BUFFER_PIPELINE 17 + #define SDL_GPU_ASSUME_CORE_FBO 17 18 #define SDL_GPU_ASSUME_SHADERS 18 19 #define SDL_GPU_SKIP_ENABLE_TEXTURE_2D 19 20 #define SDL_GPU_SKIP_LINE_WIDTH