Skip to content

Commit b5933a3

Browse files
committed
WebGL: return -1 for invalid uniform locations and other WebGL objects
1 parent 67524aa commit b5933a3

File tree

4 files changed

+13
-10
lines changed

4 files changed

+13
-10
lines changed

Source/Ejecta/EJCanvas/WebGL/EJBindingWebGLObjects.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
}
99
- (id)initWithWebGLContext:(EJBindingCanvasContextWebGL *)webglContext index:(GLuint)index;
1010
- (void)invalidate;
11-
+ (GLuint)indexFromJSValue:(JSValueRef)value;
11+
+ (GLint)indexFromJSValue:(JSValueRef)value;
1212
+ (EJBindingWebGLObject *)webGLObjectFromJSValue:(JSValueRef)value;
1313
+ (JSObjectRef)createJSObjectWithContext:(JSContextRef)ctx
1414
scriptView:(EJJavaScriptView *)scriptView

Source/Ejecta/EJCanvas/WebGL/EJBindingWebGLObjects.m

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ - (void)dealloc {
2020
[super dealloc];
2121
}
2222

23-
+ (GLuint)indexFromJSValue:(JSValueRef)value {
23+
+ (GLint)indexFromJSValue:(JSValueRef)value {
2424
if( !value ) { return 0; }
2525

2626
EJBindingWebGLObject *binding = (EJBindingWebGLObject *)JSValueGetPrivate(value);
27-
return (binding && [binding isKindOfClass:[self class]]) ? binding->index : 0;
27+
return (binding && [binding isKindOfClass:[self class]]) ? binding->index : -1;
2828
}
2929

3030
+ (EJBindingWebGLObject *)webGLObjectFromJSValue:(JSValueRef)value {

Source/Ejecta/EJCanvas/WebGL/EJCanvasContextWebGL.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#import "EJCanvasContext.h"
22

3+
#define EJ_WEBGL_DEFAULT_FRAMEBUFFER -1
4+
#define EJ_WEBGL_DEFAULT_RENDERBUFFER -1
5+
36
@class EJJavaScriptView;
47
@interface EJCanvasContextWebGL : EJCanvasContext {
58
GLuint viewFrameBuffer, viewRenderBuffer;
@@ -13,8 +16,8 @@
1316

1417
- (id)initWithScriptView:(EJJavaScriptView *)scriptView width:(short)width height:(short)height;
1518
- (void)resizeAuxiliaryBuffers;
16-
- (void)bindFramebuffer:(GLuint)framebuffer toTarget:(GLuint)target;
17-
- (void)bindRenderbuffer:(GLuint)framebuffer toTarget:(GLuint)target;
19+
- (void)bindFramebuffer:(GLint)framebuffer toTarget:(GLuint)target;
20+
- (void)bindRenderbuffer:(GLint)renderbuffer toTarget:(GLuint)target;
1821
- (void)create;
1922
- (void)prepare;
2023
- (void)clear;

Source/Ejecta/EJCanvas/WebGL/EJCanvasContextWebGL.m

+5-5
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,17 @@ - (void)clear {
119119
glClearColor(c[0], c[1], c[2], c[3]);
120120
}
121121

122-
- (void)bindFramebuffer:(GLuint)framebuffer toTarget:(GLuint)target {
123-
if( framebuffer == 0 ) {
122+
- (void)bindFramebuffer:(GLint)framebuffer toTarget:(GLuint)target {
123+
if( framebuffer == EJ_WEBGL_DEFAULT_FRAMEBUFFER ) {
124124
framebuffer = msaaEnabled ? msaaFrameBuffer : viewFrameBuffer;
125-
[self bindRenderbuffer:0 toTarget:GL_RENDERBUFFER];
125+
[self bindRenderbuffer:EJ_WEBGL_DEFAULT_RENDERBUFFER toTarget:GL_RENDERBUFFER];
126126
}
127127
glBindFramebuffer(target, framebuffer);
128128
boundFrameBuffer = framebuffer;
129129
}
130130

131-
- (void)bindRenderbuffer:(GLuint)renderbuffer toTarget:(GLuint)target {
132-
if( renderbuffer == 0 ) {
131+
- (void)bindRenderbuffer:(GLint)renderbuffer toTarget:(GLuint)target {
132+
if( renderbuffer == EJ_WEBGL_DEFAULT_RENDERBUFFER ) {
133133
renderbuffer = msaaEnabled ? msaaRenderBuffer : viewRenderBuffer;
134134
}
135135
glBindRenderbuffer(target, renderbuffer);

0 commit comments

Comments
 (0)