|
|
@@ -1,719 +0,0 @@
|
|
|
-/*
|
|
|
- Copyright (C) 2011 by Ivan Safrin
|
|
|
-
|
|
|
- Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
- of this software and associated documentation files (the "Software"), to deal
|
|
|
- in the Software without restriction, including without limitation the rights
|
|
|
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
- copies of the Software, and to permit persons to whom the Software is
|
|
|
- furnished to do so, subject to the following conditions:
|
|
|
-
|
|
|
- The above copyright notice and this permission notice shall be included in
|
|
|
- all copies or substantial portions of the Software.
|
|
|
-
|
|
|
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
- THE SOFTWARE.
|
|
|
-*/
|
|
|
-
|
|
|
-#include "PolyGLES1Renderer.h"
|
|
|
-
|
|
|
-using namespace Polycode;
|
|
|
-
|
|
|
-OpenGLES1Renderer::OpenGLES1Renderer() : Renderer() {
|
|
|
- nearPlane = 0.1f;
|
|
|
- farPlane = 1000.0f;
|
|
|
-
|
|
|
- glGenFramebuffersOES(1, &defaultFramebuffer);
|
|
|
- glGenRenderbuffersOES(1, &colorRenderbuffer);
|
|
|
- glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
|
|
|
- glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
|
|
|
- glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::Resize(int xRes, int yRes) {
|
|
|
-
|
|
|
- this->xRes = xRes;
|
|
|
- this->yRes = yRes;
|
|
|
- glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);
|
|
|
- glClearDepthf(1.0f);
|
|
|
-
|
|
|
- glMatrixMode(GL_PROJECTION);
|
|
|
- glLoadIdentity();
|
|
|
- gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
|
|
|
- glViewport(0, 0, xRes, yRes);
|
|
|
- setScissorBox(0, 0, xRex, yRes);
|
|
|
-
|
|
|
- glMatrixMode(GL_MODELVIEW);
|
|
|
- glLineWidth(1);
|
|
|
- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
|
-
|
|
|
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
|
|
- glEnable(GL_BLEND);
|
|
|
- glShadeModel(GL_SMOOTH);
|
|
|
- glDepthFunc( GL_LEQUAL );
|
|
|
-
|
|
|
- glEnable(GL_DEPTH_TEST);
|
|
|
-
|
|
|
- glLineWidth(1.0f);
|
|
|
- glEnable(GL_LINE_SMOOTH);
|
|
|
-
|
|
|
- GLint numBuffers = 0;
|
|
|
-// glGetIntegerv(GL_MAX_DRAW_BUFFERS, &numBuffers);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::enableAlphaTest(bool val) {
|
|
|
- if(val) {
|
|
|
- glAlphaFunc ( GL_GREATER, 0.01) ;
|
|
|
- glEnable ( GL_ALPHA_TEST ) ;
|
|
|
- } else {
|
|
|
- glDisable( GL_ALPHA_TEST ) ;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setLineSmooth(bool val) {
|
|
|
- if(val)
|
|
|
- glEnable(GL_LINE_SMOOTH);
|
|
|
- else
|
|
|
- glDisable(GL_LINE_SMOOTH);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setFOV(Number fov) {
|
|
|
- this->fov = fov;
|
|
|
- glMatrixMode(GL_PROJECTION);
|
|
|
- glLoadIdentity();
|
|
|
- gluPerspective(fov,(GLfloat)xRes/(GLfloat)yRes,nearPlane,farPlane);
|
|
|
- glViewport(0, 0, xRes, yRes);
|
|
|
- glScissor(0, 0, xRes, yRes);
|
|
|
- glMatrixMode(GL_MODELVIEW);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setViewportSize(int w, int h, Number fov) {
|
|
|
- glMatrixMode(GL_PROJECTION);
|
|
|
- glLoadIdentity();
|
|
|
- gluPerspective(fov,(GLfloat)w/(GLfloat)h,nearPlane,farPlane);
|
|
|
- glViewport(0, 0, w, h);
|
|
|
- glScissor(0, 0, w, h);
|
|
|
- glMatrixMode(GL_MODELVIEW);
|
|
|
-}
|
|
|
-
|
|
|
-Vector3 OpenGLES1Renderer::Unproject(Number x, Number y) {
|
|
|
- Vector3 coords;
|
|
|
- GLfloat wx, wy, wz;
|
|
|
- GLfloat cx, cy, cz;
|
|
|
-
|
|
|
- GLfloat mv[16];
|
|
|
- glGetFloatv( GL_MODELVIEW_MATRIX, mv );
|
|
|
-
|
|
|
- GLfloat proj[16];
|
|
|
- glGetFloatv( GL_PROJECTION_MATRIX, proj );
|
|
|
-
|
|
|
- GLint vp[4];
|
|
|
- glGetIntegerv( GL_VIEWPORT, vp );
|
|
|
-
|
|
|
- wx = ( Number ) x;
|
|
|
- wy = ( Number ) vp[3] - ( Number ) y;
|
|
|
- glReadPixels( x, wy, 1, 1, GL_DEPTH_COMPONENT16_OES, GL_FLOAT, &wz );
|
|
|
-
|
|
|
- gluUnProject((GLdouble)wx, (GLdouble)wy, (GLdouble)wz, (GLdouble*)mv, (GLdouble*)proj, vp, (GLdouble*)&cx, (GLdouble*)&cy, (GLdouble*)&cz );
|
|
|
-
|
|
|
- coords = Vector3( cx, cy, cz );
|
|
|
-
|
|
|
- return coords;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-bool OpenGLES1Renderer::test2DCoordinate(Number x, Number y, Poly::Polygon *poly, const Matrix4 &matrix, bool billboardMode) {
|
|
|
- GLfloat nearPlane[3],farPlane[3];
|
|
|
-
|
|
|
- GLfloat mv[16];
|
|
|
- Matrix4 camInverse = cameraMatrix.Inverse();
|
|
|
- Matrix4 cmv;
|
|
|
- cmv.identity();
|
|
|
- cmv = cmv * camInverse;
|
|
|
-
|
|
|
- for(int i=0; i < 16; i++) {
|
|
|
- mv[i] = cmv.ml[i];
|
|
|
- }
|
|
|
-
|
|
|
- GLint vp[4];
|
|
|
- glGetIntegerv( GL_VIEWPORT, vp );
|
|
|
-
|
|
|
- gluUnProject((GLdouble)x, (GLdouble)yRes - y, 0.0, (GLdouble*)mv, (GLdouble*)sceneProjectionMatrix, vp, (GLdouble*)&nearPlane[0], (GLdouble*)&nearPlane[1], (GLdouble*)&nearPlane[2]);
|
|
|
- gluUnProject((GLdouble)x, (GLdouble)yRes - y, 1.0, (GLdouble*)mv, (GLdouble*)sceneProjectionMatrix, vp, (GLdouble*)&farPlane[0], (GLdouble*)&farPlane[1], (GLdouble*)&farPlane[2]);
|
|
|
-
|
|
|
- Vector3 nearVec(nearPlane[0], nearPlane[1], nearPlane[2]);
|
|
|
- Vector3 farVec(farPlane[0], farPlane[1], farPlane[2]);
|
|
|
-
|
|
|
- Vector3 dirVec = farVec - nearVec;
|
|
|
- dirVec.Normalize();
|
|
|
-
|
|
|
- Vector3 hitPoint;
|
|
|
-
|
|
|
- Matrix4 fullMatrix = matrix;
|
|
|
-
|
|
|
- if(poly->getVertexCount() == 3) {
|
|
|
- return rayTriangleIntersect(Vector3(0,0,0), dirVec, fullMatrix * (*poly->getVertex(0)), fullMatrix * (*poly->getVertex(1)), fullMatrix * (*poly->getVertex(2)), &hitPoint);
|
|
|
- } else if(poly->getVertexCount() == 4) {
|
|
|
- return (rayTriangleIntersect(Vector3(0,0,0), dirVec, fullMatrix * (*poly->getVertex(2)), fullMatrix * (*poly->getVertex(1)), fullMatrix * (*poly->getVertex(0)), &hitPoint) ||
|
|
|
- rayTriangleIntersect(Vector3(0,0,0), dirVec, fullMatrix * (*poly->getVertex(0)), fullMatrix * (*poly->getVertex(3)), fullMatrix * (*poly->getVertex(2)), &hitPoint));
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::enableDepthTest(bool val) {
|
|
|
- // if(val)
|
|
|
- // glEnable(GL_DEPTH_TEST);
|
|
|
- // else
|
|
|
- // glDisable(GL_DEPTH_TEST);
|
|
|
- if(val)
|
|
|
- glDepthMask(GL_TRUE);
|
|
|
- else
|
|
|
- glDepthMask(GL_FALSE);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setModelviewMatrix(Matrix4 m) {
|
|
|
- glLoadMatrixf(m.ml);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::multModelviewMatrix(Matrix4 m) {
|
|
|
- // glMatrixMode(GL_MODELVIEW);
|
|
|
- glMultMatrixf(m.ml);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::enableLighting(bool enable) {
|
|
|
- lightingEnabled = enable;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setLineSize(Number lineSize) {
|
|
|
- glLineWidth(lineSize);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::createVertexBufferForMesh(Mesh *mesh) {
|
|
|
-// OpenGLVertexBuffer *buffer = new OpenGLVertexBuffer(mesh);
|
|
|
-// mesh->setVertexBuffer(buffer);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::drawVertexBuffer(VertexBuffer *buffer) {
|
|
|
- /*
|
|
|
- OpenGLVertexBuffer *glVertexBuffer = (OpenGLVertexBuffer*)buffer;
|
|
|
-
|
|
|
- glEnableClientState(GL_VERTEX_ARRAY);
|
|
|
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
|
- glEnableClientState(GL_NORMAL_ARRAY);
|
|
|
- // glEnableClientState(GL_COLOR_ARRAY);
|
|
|
-
|
|
|
- // glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getColorBufferID());
|
|
|
- // glTexCoordPointer( 4, GL_FLOAT, 0, (char *) NULL );
|
|
|
- glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getVertexBufferID());
|
|
|
- glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );
|
|
|
- glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getNormalBufferID());
|
|
|
- glNormalPointer(GL_FLOAT, 0, (char *) NULL );
|
|
|
- glBindBufferARB( GL_ARRAY_BUFFER_ARB, glVertexBuffer->getTextCoordBufferID());
|
|
|
- glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );
|
|
|
-
|
|
|
- glDrawArrays( GL_TRIANGLES, 0, buffer->getVertexCount() );
|
|
|
-
|
|
|
- glDisableClientState( GL_VERTEX_ARRAY);
|
|
|
- glDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
|
|
- glDisableClientState( GL_NORMAL_ARRAY );
|
|
|
- // glDisableClientState( GL_COLOR_ARRAY );
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::enableFog(bool enable) {
|
|
|
- if(enable)
|
|
|
- glEnable(GL_FOG);
|
|
|
- else {
|
|
|
- glDisable(GL_FOG);
|
|
|
- glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setBlendingMode(int blendingMode) {
|
|
|
- switch(blendingMode) {
|
|
|
- case BLEND_MODE_NORMAL:
|
|
|
- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
|
- break;
|
|
|
- case BLEND_MODE_LIGHTEN:
|
|
|
- glBlendFunc (GL_SRC_ALPHA, GL_ONE);
|
|
|
- break;
|
|
|
- case BLEND_MODE_COLOR:
|
|
|
- glBlendFunc (GL_DST_COLOR, GL_ONE);
|
|
|
- break;
|
|
|
- default:
|
|
|
- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
|
- break;
|
|
|
- }
|
|
|
- glEnable(GL_BLEND);
|
|
|
-}
|
|
|
-
|
|
|
-Matrix4 OpenGLES1Renderer::getProjectionMatrix() {
|
|
|
- Number m[16];
|
|
|
- glGetFloatv( GL_PROJECTION_MATRIX, m);
|
|
|
- return Matrix4(m);
|
|
|
-}
|
|
|
-
|
|
|
-Matrix4 OpenGLES1Renderer::getModelviewMatrix() {
|
|
|
- Number m[16];
|
|
|
- glGetFloatv( GL_MODELVIEW_MATRIX, m);
|
|
|
- return Matrix4(m);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::renderZBufferToTexture(Texture *targetTexture) {
|
|
|
- // OpenGLES1Texture *glTexture = (OpenGLES1Texture*)targetTexture;
|
|
|
- // glBindTexture (GL_TEXTURE_2D, glTexture->getTextureID());
|
|
|
- // glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, targetTexture->getWidth(), targetTexture->getHeight(), 0);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::renderToTexture(Texture *targetTexture) {
|
|
|
- OpenGLES1Texture *glTexture = (OpenGLES1Texture*)targetTexture;
|
|
|
- glBindTexture (GL_TEXTURE_2D, glTexture->getTextureID());
|
|
|
- glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, targetTexture->getWidth(), targetTexture->getHeight(), 0);
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setFogProperties(int fogMode, Color color, Number density, Number startDepth, Number endDepth) {
|
|
|
- switch(fogMode) {
|
|
|
- case FOG_LINEAR:
|
|
|
- glFogx(GL_FOG_MODE, GL_LINEAR);
|
|
|
- break;
|
|
|
- case FOG_EXP:
|
|
|
- glFogx(GL_FOG_MODE, GL_EXP);
|
|
|
- break;
|
|
|
- case FOG_EXP2:
|
|
|
- glFogx(GL_FOG_MODE, GL_EXP2);
|
|
|
- break;
|
|
|
- default:
|
|
|
- glFogx(GL_FOG_MODE, GL_LINEAR);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- GLfloat fogColor[4]= {color.r, color.g, color.b, color.a};
|
|
|
- glFogfv(GL_FOG_COLOR, fogColor);
|
|
|
- glFogf(GL_FOG_DENSITY, density);
|
|
|
- glHint(GL_FOG_HINT, GL_DONT_CARE);
|
|
|
- glFogf(GL_FOG_START, startDepth);
|
|
|
- glFogf(GL_FOG_END, endDepth);
|
|
|
- glClearColor(color.r, color.g, color.b, color.a);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setOrthoMode() {
|
|
|
- setBlendingMode(BLEND_MODE_NORMAL);
|
|
|
- if(!orthoMode) {
|
|
|
- glDisable(GL_LIGHTING);
|
|
|
- glMatrixMode(GL_PROJECTION);
|
|
|
- glDisable(GL_CULL_FACE);
|
|
|
- glPushMatrix();
|
|
|
- glLoadIdentity();
|
|
|
- glOrthox(0.0f,xRes,yRes,0,-1.0f,1.0f);
|
|
|
- // glOrtho(0.0f,2500.0f,2500.0f,0,-1.0f,1.0f);
|
|
|
- orthoMode = true;
|
|
|
- }
|
|
|
- glMatrixMode(GL_MODELVIEW);
|
|
|
- glLoadIdentity();
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::enableBackfaceCulling(bool val) {
|
|
|
- if(val)
|
|
|
- glEnable(GL_CULL_FACE);
|
|
|
- else
|
|
|
- glDisable(GL_CULL_FACE);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setPerspectiveMode() {
|
|
|
- setBlendingMode(BLEND_MODE_NORMAL);
|
|
|
- if(orthoMode) {
|
|
|
- if(lightingEnabled) {
|
|
|
- }
|
|
|
- glEnable (GL_DEPTH_TEST);
|
|
|
- glEnable(GL_CULL_FACE);
|
|
|
- glMatrixMode( GL_PROJECTION );
|
|
|
- glPopMatrix();
|
|
|
- glMatrixMode( GL_MODELVIEW );
|
|
|
- orthoMode = false;
|
|
|
- }
|
|
|
- glLoadIdentity();
|
|
|
-
|
|
|
- glGetFloatv( GL_PROJECTION_MATRIX, sceneProjectionMatrix);
|
|
|
- currentTexture = NULL;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::BeginRender() {
|
|
|
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
- glLoadIdentity();
|
|
|
- currentTexture = NULL;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setClearColor(Number r, Number g, Number b) {
|
|
|
- clearColor.setColor(r,g,b,1.0f);
|
|
|
- glClearColor(r,g,b,0.0f);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::translate3D(Vector3 *position) {
|
|
|
- glTranslatef(position->x, position->y, position->z);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::translate3D(Number x, Number y, Number z) {
|
|
|
- glTranslatef(x, y, z);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::scale3D(Vector3 *scale) {
|
|
|
- glScalef(scale->x, scale->y, scale->z);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::bindFrameBufferTexture(Texture *texture) {
|
|
|
- /*
|
|
|
- if(currentFrameBufferTexture) {
|
|
|
- previousFrameBufferTexture = currentFrameBufferTexture;
|
|
|
- }
|
|
|
- OpenGLES1Texture *glTexture = (OpenGLES1Texture*)texture;
|
|
|
-
|
|
|
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, glTexture->getFrameBufferID());
|
|
|
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
-
|
|
|
- currentFrameBufferTexture = texture;
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::unbindFramebuffers() {
|
|
|
- /*
|
|
|
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
|
|
|
- currentFrameBufferTexture = NULL;
|
|
|
- if(previousFrameBufferTexture) {
|
|
|
- bindFrameBufferTexture(previousFrameBufferTexture);
|
|
|
- previousFrameBufferTexture = NULL;
|
|
|
- }
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void OpenGLES1Renderer::createRenderTextures(Texture **colorBuffer, Texture **depthBuffer, int width, int height) {
|
|
|
- /*
|
|
|
- Logger::log("generating fbo textures %d %d\n", colorBuffer, depthBuffer);
|
|
|
-
|
|
|
- GLuint depthTexture,colorTexture;
|
|
|
- GLenum status;
|
|
|
- GLuint frameBufferID;
|
|
|
-
|
|
|
- glGenFramebuffersEXT(1, &frameBufferID);
|
|
|
-
|
|
|
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);
|
|
|
- glGenTextures(1,&colorTexture);
|
|
|
- glBindTexture(GL_TEXTURE_2D,colorTexture);
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
|
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
|
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
|
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
|
|
-
|
|
|
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTexture, 0);
|
|
|
-
|
|
|
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
|
|
- if(status == GL_FRAMEBUFFER_COMPLETE_EXT) {
|
|
|
- Logger::log("color fbo generation successful\n");
|
|
|
- } else {
|
|
|
- Logger::log("color fbo generation failed\n");
|
|
|
- }
|
|
|
-
|
|
|
- if(colorBuffer) {
|
|
|
- OpenGLES1Texture *colorBufferTexture = new OpenGLES1Texture(width, height);
|
|
|
- colorBufferTexture->setGLInfo(colorTexture, frameBufferID);
|
|
|
- *colorBuffer = ((Texture*)colorBufferTexture);
|
|
|
- }
|
|
|
-
|
|
|
- if(depthBuffer) {
|
|
|
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);
|
|
|
- glGenTextures(1,&depthTexture);
|
|
|
- glBindTexture(GL_TEXTURE_2D,depthTexture);
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
|
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
|
|
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
|
|
-
|
|
|
- // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,GL_COMPARE_R_TO_TEXTURE);
|
|
|
- // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
|
|
- glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
|
|
|
-
|
|
|
- glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT,width,height,0,GL_DEPTH_COMPONENT,GL_UNSIGNED_BYTE,0);
|
|
|
-
|
|
|
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depthTexture, 0);
|
|
|
-
|
|
|
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
|
|
-
|
|
|
- if(status == GL_FRAMEBUFFER_COMPLETE_EXT) {
|
|
|
- Logger::log("depth fbo generation successful\n");
|
|
|
- } else {
|
|
|
- Logger::log("depth fbo generation failed\n");
|
|
|
- }
|
|
|
-
|
|
|
- OpenGLES1Texture *depthBufferTexture = new OpenGLES1Texture(width, height);
|
|
|
- depthBufferTexture->setGLInfo(depthTexture, frameBufferID);
|
|
|
- *depthBuffer = ((Texture*)depthBufferTexture);
|
|
|
- }
|
|
|
-
|
|
|
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
|
|
|
-*/
|
|
|
-}
|
|
|
-
|
|
|
-Texture *OpenGLES1Renderer::createFramebufferTexture(unsigned int width, unsigned int height) {
|
|
|
- OpenGLES1Texture *newTexture = new OpenGLES1Texture(width, height);
|
|
|
- return newTexture;
|
|
|
-}
|
|
|
-
|
|
|
-Cubemap *OpenGLES1Renderer::createCubemap(Texture *t0, Texture *t1, Texture *t2, Texture *t3, Texture *t4, Texture *t5) {
|
|
|
-// OpenGLCubemap *newCubemap = new OpenGLCubemap(t0,t1,t2,t3,t4,t5);
|
|
|
-// return newCubemap;
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
-Texture *OpenGLES1Renderer::createTexture(unsigned int width, unsigned int height, char *textureData, bool clamp, int type) {
|
|
|
- OpenGLES1Texture *newTexture = new OpenGLES1Texture(width, height, textureData, clamp, textureFilteringMode);
|
|
|
- return newTexture;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::clearScreen(bool clearColor, bool clearDepth) {
|
|
|
- GLbitfield mask = 0;
|
|
|
- if (clearColor) {
|
|
|
- mask |= GL_COLOR_BUFFER_BIT;
|
|
|
- }
|
|
|
- if (clearDepth) {
|
|
|
- mask |= GL_DEPTH_BUFFER_BIT;
|
|
|
- }
|
|
|
- if (mask) {
|
|
|
- glClear(mask);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::applyMaterial(Material *material, ShaderBinding *localOptions,unsigned int shaderIndex) {
|
|
|
- if(!material->getShader(shaderIndex) || !shadersEnabled) {
|
|
|
- setTexture(NULL);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- FixedShaderBinding *fBinding;
|
|
|
-
|
|
|
- switch(material->getShader(shaderIndex)->getType()) {
|
|
|
- case Shader::FIXED_SHADER:
|
|
|
- // FixedShader *fShader = (FixedShader*)material->getShader();
|
|
|
- fBinding = (FixedShaderBinding*)material->getShaderBinding(shaderIndex);
|
|
|
- setTexture(fBinding->getDiffuseTexture());
|
|
|
- // setTexture(fShader->getDiffuseTexture());
|
|
|
- break;
|
|
|
- case Shader::CG_SHADER:
|
|
|
- break;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::clearShader() {
|
|
|
- currentMaterial = NULL;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setTexture(Texture *texture) {
|
|
|
- if(texture == NULL) {
|
|
|
- glDisable(GL_TEXTURE_2D);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(renderMode == RENDER_MODE_NORMAL) {
|
|
|
- glEnable (GL_TEXTURE_2D);
|
|
|
- if(currentTexture != texture) {
|
|
|
- OpenGLES1Texture *glTexture = (OpenGLES1Texture*)texture;
|
|
|
- glBindTexture (GL_TEXTURE_2D, glTexture->getTextureID());
|
|
|
- }
|
|
|
- } else {
|
|
|
- glDisable(GL_TEXTURE_2D);
|
|
|
- }
|
|
|
-
|
|
|
- currentTexture = texture;
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::beginRenderOperation(int meshType) {
|
|
|
- /*
|
|
|
- switch(meshType) {
|
|
|
- case Mesh::TRI_MESH:
|
|
|
- switch(renderMode) {
|
|
|
- case RENDER_MODE_NORMAL:
|
|
|
- Begin(GL_TRIANGLES);
|
|
|
- break;
|
|
|
- case RENDER_MODE_WIREFRAME:
|
|
|
- glBegin(GL_LINE_LOOP);
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Mesh::TRIFAN_MESH:
|
|
|
- switch(renderMode) {
|
|
|
- case RENDER_MODE_NORMAL:
|
|
|
- glBegin(GL_TRIANGLE_FAN);
|
|
|
- break;
|
|
|
- case RENDER_MODE_WIREFRAME:
|
|
|
- glBegin(GL_LINE_LOOP);
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Mesh::QUAD_MESH:
|
|
|
- switch(renderMode) {
|
|
|
- case RENDER_MODE_NORMAL:
|
|
|
- glBegin(GL_QUADS);
|
|
|
- break;
|
|
|
- case RENDER_MODE_WIREFRAME:
|
|
|
- glBegin(GL_LINE_LOOP);
|
|
|
- break;
|
|
|
- }
|
|
|
- break;
|
|
|
- case Mesh::LINE_MESH:
|
|
|
- glBegin(GL_LINES);
|
|
|
- break;
|
|
|
- }
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::pushMatrix() {
|
|
|
- glPushMatrix();
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::popMatrix() {
|
|
|
- glPopMatrix();
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void OpenGLES1Renderer::endRenderOperation() {
|
|
|
-// glEnd();
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw3DPolygon(Poly::Polygon *polygon) {
|
|
|
- unsigned int vCount = polygon->getVertexCount();
|
|
|
- for(int i=0; i < vCount; i++) {
|
|
|
- if(polygon->usesFaceUV())
|
|
|
- draw3DVertex(polygon->getVertex(i), polygon->getTexCoord(i));
|
|
|
- else
|
|
|
- draw3DVertex(polygon->getVertex(i), NULL);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw3DVertex2UV(Vertex *vertex, Vector2 *faceUV1, Vector2 *faceUV2) {
|
|
|
- /*
|
|
|
- if(vertex->useVertexColor)
|
|
|
- glColor4f(vertex->vertexColor.r, vertex->vertexColor.g, vertex->vertexColor.b, vertex->vertexColor.a);
|
|
|
-
|
|
|
- if(currentTexture || currentMaterial) {
|
|
|
- glMultiTexCoord4x(GL_TEXTURE0, faceUV1->x, faceUV1->y,0,0);
|
|
|
- glMultiTexCoord4x(GL_TEXTURE1, faceUV2->x, faceUV2->y,0,0);
|
|
|
- }
|
|
|
-
|
|
|
- // glNormal3f(vertex->normal->x, vertex->normal->y, vertex->normal->z);
|
|
|
- glVertex3f(vertex->x, vertex->y, vertex->z);
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setNormal(const Vector3 &normal) {
|
|
|
- glNormal3f(normal.x, normal.y, normal.z);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw3DVertex(Vertex *vertex, Vector2 *faceUV) {
|
|
|
- /*
|
|
|
- if(vertex->useVertexColor)
|
|
|
- glColor4f(vertex->vertexColor.r, vertex->vertexColor.g, vertex->vertexColor.b, vertex->vertexColor.a);
|
|
|
-
|
|
|
- if(currentTexture || currentMaterial) {
|
|
|
- if(faceUV != NULL)
|
|
|
- glTexCoord2f(faceUV->x, faceUV->y);
|
|
|
- else
|
|
|
- glTexCoord2f(vertex->getTexCoord()->x, vertex->getTexCoord()->y);
|
|
|
- }
|
|
|
-
|
|
|
- // glNormal3f(vertex->normal->x, vertex->normal->y, vertex->normal->z);
|
|
|
- glVertex3f(vertex->x, vertex->y, vertex->z);
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::drawScreenQuad(Number qx, Number qy) {
|
|
|
- /*
|
|
|
- setOrthoMode();
|
|
|
-
|
|
|
- Number xscale = qx/((Number)getXRes()) * 2.0f;
|
|
|
- Number yscale = qy/((Number)getYRes()) * 2.0f;
|
|
|
-
|
|
|
- glBegin(GL_QUADS);
|
|
|
- glColor4f(1.0f,1.0f,1.0f,1.0f);
|
|
|
-
|
|
|
- glTexCoord2f(0.0f, 1.0f);
|
|
|
- glVertex2f(-1, -1+(1.0f*yscale));
|
|
|
-
|
|
|
- glTexCoord2f(0.0f, 0.0f);
|
|
|
- glVertex2f(-1.0f, -1.0f);
|
|
|
-
|
|
|
- glTexCoord2f(1.0f, 0.0f);
|
|
|
- glVertex2f(-1+(1.0f*xscale), -1.0f);
|
|
|
-
|
|
|
- glTexCoord2f(1.0f, 1.0f);
|
|
|
- glVertex2f(-1+(1.0f*xscale), -1+(1.0f*yscale));
|
|
|
- glEnd();
|
|
|
- setPerspectiveMode();
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw2DVertex(Vertex *vertex) {
|
|
|
- /*
|
|
|
- // glColor4f(0,0,0,0);
|
|
|
- if(vertex->useVertexColor)
|
|
|
- glColor4f(vertex->vertexColor.r, vertex->vertexColor.g, vertex->vertexColor.b, vertex->vertexColor.a);
|
|
|
- if(currentTexture)
|
|
|
- glTexCoord2f(vertex->getTexCoord()->x+currentTexture->getScrollOffsetX(), vertex->getTexCoord()->y+currentTexture->getScrollOffsetY());
|
|
|
- glVertex2f(vertex->x, vertex->y);
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw3DLine(Vector3 origin, Vector3 direction, Number length, Color color) {
|
|
|
- /*
|
|
|
- glColor4f(color.r,color.g,color.b,color.a);
|
|
|
- // glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
|
|
- glVertex3f(origin.x, origin.y, origin.z);
|
|
|
-
|
|
|
- Vector3 lineEnd = origin + (direction * length);
|
|
|
- glVertex3f(lineEnd.x, lineEnd.y, lineEnd.z);
|
|
|
- */
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::translate2D(Number x, Number y) {
|
|
|
- glTranslatef(x, y, 0.0f);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::scale2D(Vector2 *scale) {
|
|
|
- glScalef(scale->x, scale->y, 1.0f);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::loadIdentity() {
|
|
|
- setBlendingMode(BLEND_MODE_NORMAL);
|
|
|
- glMatrixMode(GL_MODELVIEW);
|
|
|
- glLoadIdentity();
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::rotate2D(Number angle) {
|
|
|
- glRotatef(angle, 0.0f, 0.0f, 1.0f);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::setVertexColor(Number r, Number g, Number b, Number a) {
|
|
|
- glColor4f(r,g,b,a);
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::draw2DPolygon(Poly::Polygon *polygon) {
|
|
|
- unsigned int vCount = polygon->getVertexCount();
|
|
|
- for(int i=0; i < vCount; i++) {
|
|
|
- draw2DVertex(polygon->getVertex(i));
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void OpenGLES1Renderer::EndRender() {
|
|
|
-}
|
|
|
-
|
|
|
-OpenGLES1Renderer::~OpenGLES1Renderer() {
|
|
|
-
|
|
|
-}
|