Переглянути джерело

Added LoadScreen Render mode back.

Thomas Buck 10 роки тому
джерело
коміт
815ad09bd6
3 змінених файлів з 85 додано та 5 видалено
  1. 3
    0
      include/Render.h
  2. 6
    4
      src/Game.cpp
  3. 76
    1
      src/Render.cpp

+ 3
- 0
include/Render.h Переглянути файл

@@ -88,6 +88,7 @@ public:
88 88
 
89 89
     typedef enum {
90 90
         modeDisabled,
91
+        modeLoadScreen,
91 92
         modeVertexLight,
92 93
         modeSolid,
93 94
         modeWireframe,
@@ -118,6 +119,8 @@ public:
118 119
         skeletalMesh
119 120
     } RenderMeshType;
120 121
 
122
+    void drawLoadScreen();
123
+
121 124
     /*!
122 125
      * \brief Constructs an object of Render
123 126
      */

+ 6
- 4
src/Game.cpp Переглянути файл

@@ -48,6 +48,8 @@ int Game::initialize() {
48 48
     mRender = new Render();
49 49
     mRender->initTextures(gOpenRaider->mDataDir, &mTextureStart, &mTextureLevelOffset);
50 50
 
51
+    mRender->setMode(Render::modeLoadScreen);
52
+
51 53
     return 0;
52 54
 }
53 55
 
@@ -61,7 +63,8 @@ void Game::percentCallback(int percent) {
61 63
 }
62 64
 
63 65
 int Game::loadLevel(const char *level) {
64
-    destroy();
66
+    if (mLoaded)
67
+        destroy();
65 68
 
66 69
     mName = bufferString("%s", level);
67 70
 
@@ -119,10 +122,9 @@ void Game::handleMouseMotion(int xrel, int yrel) {
119 122
 
120 123
 void Game::display() {
121 124
     if (mLoaded) {
122
-        //glClearColor(0.00f, 0.70f, 0.00f, 1.0f);
123
-        //glClear(GL_COLOR_BUFFER_BIT);
124 125
 
125
-        mRender->Display();
126 126
     }
127
+
128
+    mRender->Display();
127 129
 }
128 130
 

+ 76
- 1
src/Render.cpp Переглянути файл

@@ -47,6 +47,70 @@ const float CYAN[]        = {  0.0f,  1.0f,  1.0f, 1.0f };
47 47
 
48 48
 ViewVolume gViewVolume; /* View volume for frustum culling */
49 49
 
50
+void Render::drawLoadScreen()
51
+{
52
+    float x = 0.0f, y = 0.0f, z = -160.0f;
53
+    float w = 500.0f, h = 500.0f;
54
+
55
+
56
+    if (mTexture.getTextureCount() <= 0)
57
+        return;
58
+
59
+    // Mongoose 2002.01.01, Rendered while game is loading...
60
+    //! \fixme seperate logo/particle coor later
61
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
62
+    glLoadIdentity();
63
+
64
+    glColor3fv(WHITE);
65
+
66
+    if (mFlags & Render::fGL_Lights)
67
+        glDisable(GL_LIGHTING);
68
+
69
+    // Mongoose 2002.01.01, Draw logo/load screen
70
+    glTranslatef(0.0f, 0.0f, -2000.0f);
71
+    glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
72
+
73
+    glBindTexture(GL_TEXTURE_2D, 3);
74
+
75
+    glBegin(GL_TRIANGLE_STRIP);
76
+    glTexCoord2f(1.0, 1.0);
77
+    glVertex3f(x + w, y + h, z);
78
+    glTexCoord2f(0.0, 1.0);
79
+    glVertex3f(x - w, y + h, z);
80
+    glTexCoord2f(1.0, 0.0);
81
+    glVertex3f(x + w, y - h, z);
82
+    glTexCoord2f(0.0, 0.0);
83
+    glVertex3f(x - w, y - h, z);
84
+    glEnd();
85
+
86
+    if (mFlags & Render::fGL_Lights)
87
+        glEnable(GL_LIGHTING);
88
+
89
+#ifdef USING_EMITTER
90
+    // Mongoose 2002.01.01, Test particle prototype on load screen
91
+    if (mEmitter && mFlags & Render::fParticles)
92
+    {
93
+        glPushMatrix();
94
+        glLoadIdentity();
95
+
96
+        glEnable(GL_BLEND);
97
+        glRotatef(180.0, 1.0, 0.0, 0.0);
98
+        glTranslatef(0.0, -820.0, 575.0);
99
+        glScalef(80.0, 80.0, 80.0);
100
+
101
+        // Update view volume for vising
102
+        updateViewVolume();
103
+        gViewVolume.getFrustum(mEmitter->mFrustum);
104
+        mEmitter->Flags(Emitter::fUseDepthSorting, true);
105
+        mEmitter->Draw();
106
+
107
+        glPopMatrix();
108
+    }
109
+#endif
110
+
111
+    glFlush();
112
+}
113
+
50 114
 
51 115
 int compareEntites(const void *voidA, const void *voidB)
52 116
 {
@@ -462,7 +526,14 @@ void Render::setMode(int n)
462 526
             glDisable(GL_TEXTURE_2D);
463 527
             break;
464 528
         default:
465
-            glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
529
+            if (mMode == Render::modeLoadScreen)
530
+            {
531
+                glBlendFunc(GL_SRC_ALPHA, GL_ONE);
532
+            }
533
+            else
534
+            {
535
+                glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
536
+            }
466 537
 
467 538
             glClearColor(BLACK[0], BLACK[1], BLACK[2], BLACK[3]);
468 539
 
@@ -528,6 +599,10 @@ void Render::Display()
528 599
     {
529 600
         case Render::modeDisabled:
530 601
             return;
602
+        case Render::modeLoadScreen:
603
+            //! \fixme entry for seperate main drawing method -- Mongoose 2002.01.01
604
+            drawLoadScreen();
605
+            return;
531 606
         default:
532 607
             ;
533 608
     }

Завантаження…
Відмінити
Зберегти