main: Add entry point for NamedFramebufferRenderbuffer.
[Fredrik: - Remove the DummyRenderbuffer checks now that they are
done in _mesa_lookup_renderbuffer_err.
- Fix the <renderbuffertarget> name in error messages.
- Make the error message in _mesa_framebuffer_renderbuffer
reflect that <fb> might not be the bound framebuffer.
- Remove EXT suffixes from GL tokens.]
Reviewed-by: Fredrik Höglund <fredrik@kde.org>
Signed-off-by: Fredrik Höglund <fredrik@kde.org>
This commit is contained in:
committed by
Fredrik Höglund
parent
3d100372f1
commit
a29318bf0a
@@ -159,6 +159,13 @@
|
||||
<param name="framebuffers" type="GLuint *" />
|
||||
</function>
|
||||
|
||||
<function name="NamedFramebufferRenderbuffer" offset="assign">
|
||||
<param name="framebuffer" type="GLuint" />
|
||||
<param name="attachment" type="GLenum" />
|
||||
<param name="renderbuffertarget" type="GLenum" />
|
||||
<param name="renderbuffer" type="GLuint" />
|
||||
</function>
|
||||
|
||||
<!-- Renderbuffer object functions -->
|
||||
|
||||
<function name="CreateRenderbuffers" offset="assign">
|
||||
|
||||
+85
-44
@@ -2896,71 +2896,37 @@ _mesa_FramebufferTexture(GLenum target, GLenum attachment,
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
GLenum renderbufferTarget,
|
||||
GLuint renderbuffer)
|
||||
void
|
||||
_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
|
||||
struct gl_framebuffer *fb,
|
||||
GLenum attachment,
|
||||
struct gl_renderbuffer *rb,
|
||||
const char *func)
|
||||
{
|
||||
struct gl_renderbuffer_attachment *att;
|
||||
struct gl_framebuffer *fb;
|
||||
struct gl_renderbuffer *rb;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
fb = get_framebuffer_target(ctx, target);
|
||||
if (!fb) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glFramebufferRenderbuffer(target)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (renderbufferTarget != GL_RENDERBUFFER_EXT) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glFramebufferRenderbuffer(renderbufferTarget)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_mesa_is_winsys_fbo(fb)) {
|
||||
/* Can't attach new renderbuffers to a window system framebuffer */
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glFramebufferRenderbuffer");
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(window-system framebuffer)", func);
|
||||
return;
|
||||
}
|
||||
|
||||
att = get_attachment(ctx, fb, attachment);
|
||||
if (att == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glFramebufferRenderbuffer(invalid attachment %s)",
|
||||
"%s(invalid attachment %s)", func,
|
||||
_mesa_lookup_enum_by_nr(attachment));
|
||||
return;
|
||||
}
|
||||
|
||||
if (renderbuffer) {
|
||||
rb = _mesa_lookup_renderbuffer(ctx, renderbuffer);
|
||||
if (!rb) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glFramebufferRenderbuffer(non-existant"
|
||||
" renderbuffer %u)", renderbuffer);
|
||||
return;
|
||||
}
|
||||
else if (rb == &DummyRenderbuffer) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glFramebufferRenderbuffer(renderbuffer %u)",
|
||||
renderbuffer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* remove renderbuffer attachment */
|
||||
rb = NULL;
|
||||
}
|
||||
|
||||
if (attachment == GL_DEPTH_STENCIL_ATTACHMENT &&
|
||||
rb && rb->Format != MESA_FORMAT_NONE) {
|
||||
/* make sure the renderbuffer is a depth/stencil format */
|
||||
const GLenum baseFormat = _mesa_get_format_base_format(rb->Format);
|
||||
if (baseFormat != GL_DEPTH_STENCIL) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glFramebufferRenderbuffer(renderbuffer"
|
||||
" is not DEPTH_STENCIL format)");
|
||||
"%s(renderbuffer is not DEPTH_STENCIL format)", func);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2977,6 +2943,81 @@ _mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer)
|
||||
{
|
||||
struct gl_framebuffer *fb;
|
||||
struct gl_renderbuffer *rb;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
fb = get_framebuffer_target(ctx, target);
|
||||
if (!fb) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glFramebufferRenderbuffer(invalid target %s)",
|
||||
_mesa_lookup_enum_by_nr(target));
|
||||
return;
|
||||
}
|
||||
|
||||
if (renderbuffertarget != GL_RENDERBUFFER) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glFramebufferRenderbuffer(renderbuffertarget is not "
|
||||
"GL_RENDERBUFFER)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (renderbuffer) {
|
||||
rb = _mesa_lookup_renderbuffer_err(ctx, renderbuffer,
|
||||
"glFramebufferRenderbuffer");
|
||||
if (!rb)
|
||||
return;
|
||||
}
|
||||
else {
|
||||
/* remove renderbuffer attachment */
|
||||
rb = NULL;
|
||||
}
|
||||
|
||||
_mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb,
|
||||
"glFramebufferRenderbuffer");
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer)
|
||||
{
|
||||
struct gl_framebuffer *fb;
|
||||
struct gl_renderbuffer *rb;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
fb = _mesa_lookup_framebuffer_err(ctx, framebuffer,
|
||||
"glNamedFramebufferRenderbuffer");
|
||||
|
||||
if (renderbuffertarget != GL_RENDERBUFFER) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glNamedFramebufferRenderbuffer(renderbuffertarget is not "
|
||||
"GL_RENDERBUFFER)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (renderbuffer) {
|
||||
rb = _mesa_lookup_renderbuffer_err(ctx, renderbuffer,
|
||||
"glNamedFramebufferRenderbuffer");
|
||||
if (!rb)
|
||||
return;
|
||||
}
|
||||
else {
|
||||
/* remove renderbuffer attachment */
|
||||
rb = NULL;
|
||||
}
|
||||
|
||||
_mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb,
|
||||
"glNamedFramebufferRenderbuffer");
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
|
||||
GLenum pname, GLint *params)
|
||||
|
||||
@@ -87,6 +87,13 @@ _mesa_FramebufferRenderbuffer_sw(struct gl_context *ctx,
|
||||
GLenum attachment,
|
||||
struct gl_renderbuffer *rb);
|
||||
|
||||
extern void
|
||||
_mesa_framebuffer_renderbuffer(struct gl_context *ctx,
|
||||
struct gl_framebuffer *fb,
|
||||
GLenum attachment,
|
||||
struct gl_renderbuffer *rb,
|
||||
const char *func);
|
||||
|
||||
extern void
|
||||
_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
|
||||
|
||||
@@ -206,6 +213,11 @@ _mesa_FramebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_NamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment,
|
||||
GLenum renderbuffertarget,
|
||||
GLuint renderbuffer);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment,
|
||||
GLenum pname, GLint *params);
|
||||
|
||||
@@ -981,6 +981,7 @@ const struct function gl_core_functions_possible[] = {
|
||||
{ "glGetNamedBufferPointerv", 45, -1 },
|
||||
{ "glGetNamedBufferSubData", 45, -1 },
|
||||
{ "glCreateFramebuffers", 45, -1 },
|
||||
{ "glNamedFramebufferRenderbuffer", 45, -1 },
|
||||
{ "glCreateRenderbuffers", 45, -1 },
|
||||
{ "glNamedRenderbufferStorage", 45, -1 },
|
||||
{ "glNamedRenderbufferStorageMultisample", 45, -1 },
|
||||
|
||||
Reference in New Issue
Block a user