gl_ios.m 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // SPDX-License-Identifier: Unlicense OR MIT
  2. // +build darwin,ios,nometal
  3. @import UIKit;
  4. @import OpenGLES;
  5. #include "_cgo_export.h"
  6. Class gio_layerClass(void) {
  7. return [CAEAGLLayer class];
  8. }
  9. int gio_renderbufferStorage(CFTypeRef ctxRef, CFTypeRef layerRef, GLenum buffer) {
  10. EAGLContext *ctx = (__bridge EAGLContext *)ctxRef;
  11. CAEAGLLayer *layer = (__bridge CAEAGLLayer *)layerRef;
  12. return (int)[ctx renderbufferStorage:buffer fromDrawable:layer];
  13. }
  14. int gio_presentRenderbuffer(CFTypeRef ctxRef, GLenum buffer) {
  15. EAGLContext *ctx = (__bridge EAGLContext *)ctxRef;
  16. return (int)[ctx presentRenderbuffer:buffer];
  17. }
  18. int gio_makeCurrent(CFTypeRef ctxRef) {
  19. EAGLContext *ctx = (__bridge EAGLContext *)ctxRef;
  20. return (int)[EAGLContext setCurrentContext:ctx];
  21. }
  22. CFTypeRef gio_createContext(void) {
  23. EAGLContext *ctx = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
  24. if (ctx == nil) {
  25. return nil;
  26. }
  27. return CFBridgingRetain(ctx);
  28. }
  29. CFTypeRef gio_createGLLayer(void) {
  30. CAEAGLLayer *layer = [[CAEAGLLayer layer] init];
  31. if (layer == nil) {
  32. return nil;
  33. }
  34. layer.drawableProperties = @{kEAGLDrawablePropertyColorFormat: kEAGLColorFormatSRGBA8};
  35. layer.opaque = YES;
  36. layer.anchorPoint = CGPointMake(0, 0);
  37. return CFBridgingRetain(layer);
  38. }