18#ifndef NANOVG_GL_UTILS_H
19#define NANOVG_GL_UTILS_H
37#ifdef NANOVG_GL_IMPLEMENTATION
39#if defined(NANOVG_GL3) || defined(NANOVG_GLES2) || defined(NANOVG_GLES3)
41# define NANOVG_FBO_VALID 1
42#elif defined(NANOVG_GL2)
45# include <OpenGL/glext.h>
46# define NANOVG_FBO_VALID 1
50static GLint defaultFBO = -1;
54#ifdef NANOVG_FBO_VALID
59 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO);
60 glGetIntegerv(GL_RENDERBUFFER_BINDING, &defaultRBO);
70#elif defined NANOVG_GL3
72#elif defined NANOVG_GLES2
74#elif defined NANOVG_GLES3
81 glGenFramebuffers(1, &fb->
fbo);
82 glBindFramebuffer(GL_FRAMEBUFFER, fb->
fbo);
85 glGenRenderbuffers(1, &fb->
rbo);
86 glBindRenderbuffer(GL_RENDERBUFFER, fb->
rbo);
87 glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8,
w,
h);
90 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb->
texture, 0);
91 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fb->
rbo);
93 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
94#ifdef GL_DEPTH24_STENCIL8
97 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
w,
h);
98 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb->
texture, 0);
99 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fb->
rbo);
101 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
106 glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
107 glBindRenderbuffer(GL_RENDERBUFFER, defaultRBO);
110 glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
111 glBindRenderbuffer(GL_RENDERBUFFER, defaultRBO);
125#ifdef NANOVG_FBO_VALID
126 if (defaultFBO == -1) glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFBO);
127 glBindFramebuffer(GL_FRAMEBUFFER, fb !=
NULL ? fb->
fbo : defaultFBO);
135#ifdef NANOVG_FBO_VALID
136 if (fb ==
NULL)
return;
138 glDeleteFramebuffers(1, &fb->
fbo);
140 glDeleteRenderbuffers(1, &fb->
rbo);
UINT_D64 w
Definition inflate.c:942
int nvgCreateImageRGBA(NVGcontext *ctx, int w, int h, int imageFlags, const unsigned char *data)
Definition nanovg.c:891
void nvgDeleteImage(NVGcontext *ctx, int image)
Definition nanovg.c:908
@ NVG_IMAGE_PREMULTIPLIED
Definition nanovg.h:143
@ NVG_IMAGE_FLIPY
Definition nanovg.h:142
#define NVG_NOTUSED(v)
Definition nanovg.h:702
NVGLUframebuffer * nvgluCreateFramebuffer(NVGcontext *ctx, int w, int h, int imageFlags)
void nvgluDeleteFramebuffer(NVGLUframebuffer *fb)
void nvgluBindFramebuffer(NVGLUframebuffer *fb)
Definition nanovg_gl_utils.h:21
GLuint fbo
Definition nanovg_gl_utils.h:23
GLuint rbo
Definition nanovg_gl_utils.h:24
int image
Definition nanovg_gl_utils.h:26
NVGcontext * ctx
Definition nanovg_gl_utils.h:22
GLuint texture
Definition nanovg_gl_utils.h:25
uch h[RAND_HEAD_LEN]
Definition crypt.c:459