Revision: 15507
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15507
Author:   blendix
Date:     2008-07-09 21:15:15 +0200 (Wed, 09 Jul 2008)

Log Message:
-----------
Apricot Branch: GLSL
====================

ATI fixes:
* Fix crash in glBitmap when rendering shadow buffers, it doesn't
  seem to like using that function with only a depth buffer.
* Workaround either a bug in the driver or Blender, but I couldn't
  find anything wrong, glVertexAttribPointerARB doesn't seem to
  work inside display lists, so now it uses immediate mode to
  create the list.
* Making deformable object for the game engine didn't check properly
  if there was actually a vertex group, causing some static objects
  to not use display lists.
* Also some cleanup in the game engine drawing code, replacing magic
  numbers with an enum.

The apricot demo seems to runs slightly faster on a ATI HD3750 than
NVidia 8800 GTS.

Modified Paths:
--------------
    branches/apricot/source/blender/gpu/intern/gpu_extensions.c
    branches/apricot/source/blender/src/drawarmature.c
    branches/apricot/source/blender/src/drawobject.c
    branches/apricot/source/blender/src/editdeform.c
    branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp
    branches/apricot/source/gameengine/Rasterizer/RAS_IRasterizer.h
    branches/apricot/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
    branches/apricot/source/gameengine/Rasterizer/RAS_MaterialBucket.h
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp
    
branches/apricot/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.h

Modified: branches/apricot/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/apricot/source/blender/gpu/intern/gpu_extensions.c 2008-07-09 
18:36:35 UTC (rev 15506)
+++ branches/apricot/source/blender/gpu/intern/gpu_extensions.c 2008-07-09 
19:15:15 UTC (rev 15507)
@@ -65,19 +65,8 @@
        - arb draw buffers? 2.0 core
 */
 
-/* TODO: we also use GL_ARB_texture_border_clamp or 
GL_SGIS_texture_border_clamp,
-   but seems to be widely supported on anything running fragment programs */
-
-/* TODO: GeforceFX float support, the issue is:
-   ARB/ATI_texture_float is not supported on nv30 (GeforceFX)
-   NV_float_buffer is, but only works with GL_TEXTURE_RECTANGLE
-   but ATI doesn't support sampler2DRect in glsl! */
-
-#define MAX_ATTACHMENTS 16
-
 struct GPUGlobal {
        GLint maxtextures;
-       GLint maxfbcolor;
        GLuint currentfb;
        GLenum halfformat;
        struct GPUGlobalLimits {
@@ -101,11 +90,6 @@
 
        if (GLEW_ARB_multitexture)
                glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &GG.maxtextures);
-       if (GLEW_EXT_framebuffer_object) {
-               glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &GG.maxfbcolor);
-               if (GG.maxfbcolor > MAX_ATTACHMENTS)
-                       GG.maxfbcolor = MAX_ATTACHMENTS;
-       }
        if (GLEW_ATI_texture_float || GLEW_ARB_texture_float) {
                GG.halfformat = (GLEW_ATI_texture_float)? GL_RGBA_FLOAT16_ATI: 
GL_RGBA16F_ARB;
        }

Modified: branches/apricot/source/blender/src/drawarmature.c
===================================================================
--- branches/apricot/source/blender/src/drawarmature.c  2008-07-09 18:36:35 UTC 
(rev 15506)
+++ branches/apricot/source/blender/src/drawarmature.c  2008-07-09 19:15:15 UTC 
(rev 15507)
@@ -2505,6 +2505,9 @@
        Object *ob= base->object;
        bArmature *arm= ob->data;
        int retval= 0;
+
+       if(G.f & G_SIMULATION)
+               return;
        
        if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) {
                /* we use color for solid lighting */

Modified: branches/apricot/source/blender/src/drawobject.c
===================================================================
--- branches/apricot/source/blender/src/drawobject.c    2008-07-09 18:36:35 UTC 
(rev 15506)
+++ branches/apricot/source/blender/src/drawobject.c    2008-07-09 19:15:15 UTC 
(rev 15507)
@@ -419,6 +419,9 @@
        float v1[3]= {0.0, 0.0, 0.0};
        float v2[3]= {0.0, 0.0, 0.0};
        float v3[3]= {0.0, 0.0, 0.0};
+
+       if(G.f & G_SIMULATION)
+               return;
        
        switch(drawtype) {
        
@@ -801,6 +804,9 @@
        float pixsize, lampsize;
        float imat[4][4], curcol[4];
        char col[4];
+
+       if(G.f & G_SIMULATION)
+               return;
        
        la= ob->data;
        
@@ -1091,6 +1097,9 @@
        float vec[8][4], tmat[4][4], fac, facx, facy, depth;
        int i;
 
+       if(G.f & G_SIMULATION)
+               return;
+
        cam= ob->data;
        
        glDisable(GL_LIGHTING);
@@ -1894,6 +1903,9 @@
        struct EditFace *efa=NULL;
        float v1[3], v2[3], v3[3], v4[3], fvec[3], col[3];
        char val[32];
+
+       if(G.f & G_SIMULATION)
+               return;
        
        if(G.vd->zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0)
                glDisable(GL_DEPTH_TEST);
@@ -1958,6 +1970,9 @@
        char conv_float[5]; /* Use a float conversion matching the grid size */
        float area, col[3]; /* area of the face,  color of the text to draw */
        
+       if(G.f & G_SIMULATION)
+               return;
+
        /* make the precission of the pronted value proportionate to the 
gridsize */
        if ((G.vd->grid) < 0.01)
                strcpy(conv_float, "%.6f");
@@ -2459,6 +2474,8 @@
                                dm->drawMappedFaces(dm, 
wpaint__setSolidDrawOptions, me->mface, 1);
                                glDisable(GL_COLOR_MATERIAL);
                                glDisable(GL_LIGHTING);
+
+                               set_gl_material(-1);
                        }
                        else if((G.f & (G_VERTEXPAINT+G_TEXTUREPAINT)) && 
me->mcol) {
                                dm->drawMappedFaces(dm, 
wpaint__setSolidDrawOptions, NULL, 1);
@@ -4735,9 +4752,8 @@
                        drawDispListwire(&ob->disp);
        }
        else if(ob->type==OB_ARMATURE) {
-               if(!(ob->flag & OB_POSEMODE)) {
+               if(!(ob->flag & OB_POSEMODE))
                        draw_armature(base, OB_WIRE, 0);
-               }
        }
 
        glLineWidth(1.0);
@@ -5252,9 +5268,8 @@
        }
 
        /* draw extra: after normal draw because of makeDispList */
-       if(dtx) {
-               if(G.f & G_SIMULATION);
-               else if(dtx & OB_AXIS) {
+       if(dtx && !(G.f & G_SIMULATION)) {
+               if(dtx & OB_AXIS) {
                        drawaxes(1.0f, flag, OB_ARROWS);
                }
                if(dtx & OB_BOUNDBOX) draw_bounding_volume(ob);

Modified: branches/apricot/source/blender/src/editdeform.c
===================================================================
--- branches/apricot/source/blender/src/editdeform.c    2008-07-09 18:36:35 UTC 
(rev 15506)
+++ branches/apricot/source/blender/src/editdeform.c    2008-07-09 19:15:15 UTC 
(rev 15507)
@@ -270,7 +270,7 @@
        int a;
 
        /* these cases don't use names to refer to vertex groups, so when
-        * they get deleted the numbers get out of synce, this corrects that */
+        * they get deleted the numbers get out of sync, this corrects that */
 
        if(ob->soft) {
                if(ob->soft->vertgroup == id)

Modified: 
branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-07-09 18:36:35 UTC (rev 15506)
+++ branches/apricot/source/gameengine/Converter/BL_BlenderDataConversion.cpp   
2008-07-09 19:15:15 UTC (rev 15507)
@@ -1656,7 +1656,7 @@
                // two options exists for deform: shape keys and armature
                // only support relative shape key
                bool bHasShapeKey = mesh->key != NULL && 
mesh->key->type==KEY_RELATIVE;
-               bool bHasDvert = mesh->dvert != NULL;
+               bool bHasDvert = mesh->dvert != NULL && ob->defbase.first;
                bool bHasArmature = (ob->parent && ob->parent->type == 
OB_ARMATURE && ob->partype==PARSKEL && bHasDvert);
 
                if (bHasShapeKey) {
@@ -2073,7 +2073,8 @@
        if (blenderscene->camera) {
                KX_Camera *gamecamera= (KX_Camera*) 
converter->FindGameObject(blenderscene->camera);
                
-               kxscene->SetActiveCamera(gamecamera);
+               if(gamecamera)
+                       kxscene->SetActiveCamera(gamecamera);
        }
 
        //      Set up armatures

Modified: branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp
===================================================================
--- branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 
2008-07-09 18:36:35 UTC (rev 15506)
+++ branches/apricot/source/gameengine/Rasterizer/RAS_BucketManager.cpp 
2008-07-09 19:15:15 UTC (rev 15507)
@@ -109,7 +109,7 @@
        // it is needed for compatibility.
        rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_DISABLED);
 
-       int drawingmode;
+       RAS_IRasterizer::DrawMode drawingmode;
        std::multiset< alphamesh, backtofront>::iterator msit = 
alphameshset.begin();
        for (; msit != alphameshset.end(); ++msit)
        {

Modified: branches/apricot/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/apricot/source/gameengine/Rasterizer/RAS_IRasterizer.h     
2008-07-09 18:36:35 UTC (rev 15506)
+++ branches/apricot/source/gameengine/Rasterizer/RAS_IRasterizer.h     
2008-07-09 19:15:15 UTC (rev 15507)
@@ -33,13 +33,24 @@
 #pragma warning (disable:4786)
 #endif
 
+#include "STR_HashedString.h"
+
 #include "MT_CmMatrix4x4.h"
 #include "MT_Matrix4x4.h"
 
+#include "RAS_TexVert.h"
+
+#include <vector>
+using namespace std;
+
 class RAS_ICanvas;
 class RAS_IPolyMaterial;
-#include "RAS_MaterialBucket.h"
 
+typedef vector<unsigned short> KX_IndexArray;
+typedef vector<RAS_TexVert> KX_VertexArray;
+typedef vector< KX_VertexArray* >  vecVertexArray;
+typedef vector< KX_IndexArray* > vecIndexArrays;
+
 /**
  * 3D rendering device context interface. 
  */
@@ -67,6 +78,16 @@
        };
 
        /**
+        * Drawing modes
+        */
+
+       enum DrawMode {
+               KX_MODE_LINES = 1,
+               KX_MODE_TRIANGLES,
+               KX_MODE_QUADS
+       };
+
+       /**
         * Valid SetDepthMask parameters
         */
        enum DepthMask {
@@ -199,45 +220,37 @@
         * IndexPrimitives: Renders primitives.
         * @param vertexarrays is an array of vertex arrays
         * @param indexarrays is an array of index arrays
-        * @param mode determines the type of primitive stored in the 
vertex/index arrays:
-        *              0 triangles
-        *              1 lines (default)
-        *              2 quads
-        * @param polymat (reserved)
+        * @param mode determines the type of primitive stored in the 
vertex/index arrays
         * @param useObjectColor will render the object using @param rgbacolor 
instead of 
         *  vertex colors.
         */
-       virtual void    IndexPrimitives( const vecVertexArray& vertexarrays,
+       virtual void IndexPrimitives( const vecVertexArray& vertexarrays,
                                                        const vecIndexArrays & 
indexarrays,
-                                                       int mode,
-                                                       class 
RAS_IPolyMaterial* polymat,
-                                                       class RAS_IRenderTools* 
rendertools,
+                                                       DrawMode mode,
                                                        bool useObjectColor,
                                                        const MT_Vector4& 
rgbacolor,
                                                        class KX_ListSlot** 
slot)=0;
 
+       virtual void IndexPrimitivesMulti( 
+                                               const vecVertexArray& 
vertexarrays,
+                                               const vecIndexArrays & 
indexarrays,
+                                               DrawMode mode,
+                                               bool useObjectColor,
+                                               const MT_Vector4& rgbacolor,
+                                               class KX_ListSlot** slot)=0;
+
        /**
         * IndexPrimitives_3DText will render text into the polygons.
         * The text to be rendered is from @param rendertools client object's 
text property.
         */
        virtual void    IndexPrimitives_3DText( const vecVertexArray& 
vertexarrays,
                                                        const vecIndexArrays & 
indexarrays,
-                                                       int mode,
+                                                       DrawMode mode,
                                                        class 
RAS_IPolyMaterial* polymat,
                                                        class RAS_IRenderTools* 
rendertools,
                                                        bool useObjectColor,
                                                        const MT_Vector4& 
rgbacolor)=0;
 
-       virtual void IndexPrimitivesMulti( 
-                                               const vecVertexArray& 
vertexarrays,
-                                               const vecIndexArrays & 
indexarrays,
-                                               int mode,
-                                               class RAS_IPolyMaterial* 
polymat,
-                                               class RAS_IRenderTools* 
rendertools,
-                                               bool useObjectColor,
-                                               const MT_Vector4& rgbacolor,
-                                               class KX_ListSlot** slot)=0;
-
        virtual void    SetProjectionMatrix(MT_CmMatrix4x4 & mat)=0;
        /* This one should become our final version, methinks. */
        /**

Modified: branches/apricot/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
===================================================================
--- branches/apricot/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp        
2008-07-09 18:36:35 UTC (rev 15506)
+++ branches/apricot/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp        
2008-07-09 19:15:15 UTC (rev 15507)
@@ -167,7 +167,7 @@
 }
 
 bool RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, 
RAS_IRasterizer* rasty,
-       RAS_IRenderTools *rendertools, int &drawmode)
+       RAS_IRenderTools *rendertools, RAS_IRasterizer::DrawMode &drawmode)
 {
        rendertools->SetViewMat(cameratrans);
 
@@ -179,14 +179,18 @@
        else

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to