Example #1
0
Shader * GlesGetShaderObject(State * state, GLuint shader) {
	if (!GlesIsBoundObject(state->shaderFreeList, GLES_MAX_SHADERS, shader)) {
		GlesRecordInvalidValue(state);
		return NULL;
	}
	
	return state->shaders + shader;
}
Example #2
0
GL_API void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices) {

	State * state = GLES_GET_STATE();

	if (count < 0) {
		GlesRecordInvalidValue(state);
		return;
	}

	if (type != GL_UNSIGNED_BYTE && type != GL_UNSIGNED_SHORT) {
		GlesRecordInvalidEnum(state);
		return;
	}

	if (state->elementArrayBuffer) {
		GLubyte * bufferBase =
			(GLubyte *) state->buffers[state->elementArrayBuffer].data;

		if (!bufferBase) {
			GlesRecordInvalidOperation(state);
			return;
		}

		indices = bufferBase + ((const GLubyte *) indices - (const GLubyte *) NULL);
	}


	if (!indices) {
		return;
	}

	if (type == GL_UNSIGNED_BYTE) {
		const GLubyte * ptr = (const GLubyte *) indices;

		if (Begin(state, mode)) {
			while (count-- > 0) {
				state->drawFunction(state, *ptr++);
			}

			End(state);
		}
	} else if (type == GL_UNSIGNED_SHORT) {
		const GLushort * ptr = (const GLushort *) indices;

		if (Begin(state, mode)) {
			while (count-- > 0) {
				state->drawFunction(state, *ptr++);
			}

			End(state);
		}
	} else {
		GlesRecordInvalidEnum(state);
	}
}
Example #3
0
GL_API void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei *length, char *infolog) {
	State * state = GLES_GET_STATE();
	Shader * shaderObject = GlesGetShaderObject(state, shader);
	
	if (!shaderObject) {
		return;
	}
	
	if (!infolog) {
		GlesRecordInvalidValue(state);
		return;
	}
	
	GlesLogExtract(&shaderObject->log, bufsize, infolog, length);
}
Example #4
0
GL_API void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height) {
	State * state = GLES_GET_STATE();

	if (width < 0 || height < 0) {
		GlesRecordInvalidValue(state);
	} else {
		state->viewport.x		= x;
		state->viewport.y		= y;
		state->viewport.width	= width;
		state->viewport.height	= height;

		state->viewportOrigin.x	= x + width / 2.0f;
		state->viewportOrigin.y = y + height / 2.0f;
		state->viewportScale.x = width / 2.0f;
		state->viewportScale.y = height / 2.0f;
	}
}
Example #5
0
GL_API void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count) {

	State * state = GLES_GET_STATE();

	if (count < 0) {
		GlesRecordInvalidValue(state);
		return;
	}

	if (Begin(state, mode)) {
		while (count-- > 0) {
			(state->drawFunction)(state, first++);
		}
		
		End(state);		
	}
}
Example #6
0
GL_API void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei *length, char *source) {
	State * state = GLES_GET_STATE();
	GLsizei returnedLength;		
	Shader * shaderObject = GlesGetShaderObject(state, shader);
	
	if (!shaderObject) {
		return;
	}
	
	if (!source) {
		GlesRecordInvalidValue(state);
		return;
	}
	
	returnedLength = shaderObject->length + 1 >= bufsize ? bufsize - 1 : shaderObject->length;
	
	GlesMemcpy(source, shaderObject->text, returnedLength);
	source[returnedLength] = '\0';
	
	if (length) {
		*length = returnedLength;
	}
}
Example #7
0
GL_API void GL_APIENTRY glGetShaderIntermediateVIN (GLuint shader, GLsizei bufsize, GLsizei *length, char *intermediate) {
	State * state = GLES_GET_STATE();
	Shader * shaderObject = GlesGetShaderObject(state, shader);
	GLsizei returnedLength;		
	
	if (!shaderObject) {
		return;
	}
	
	if (!intermediate) {
		GlesRecordInvalidValue(state);
		return;
	}
	
	returnedLength = shaderObject->size + 1 >= bufsize ? bufsize - 1 : shaderObject->size;
	
	GlesMemcpy(intermediate, shaderObject->il, returnedLength);
	intermediate[returnedLength] = '\0';
	
	if (length) {
		*length = returnedLength;
	}
}