[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: playground/games/astrododge/src
From: Rivo Laks <rivolaks () hot ! ee>
Date: 2009-07-24 19:32:06
Message-ID: 1248463926.066160.23091.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1002016 by rivol:
Precompile shaders before the game starts to avoid possible delays.
M +14 -0 gameview.cpp
M +25 -1 loadingview.cpp
M +1 -0 loadingview.h
M +15 -0 shadermanager.cpp
M +2 -0 shadermanager.h
--- trunk/playground/games/astrododge/src/gameview.cpp #1002015:1002016
@@ -138,6 +138,20 @@
mShaderManager->setLightDirection(lightDir);
renderObjects(mWorld->objects());
+ mShaderManager->setLight("spot");
+ mShaderManager->setLightColor(Vector3f(0.8, 0.8, 1.2));
+ renderObjects(mWorld->objects());
+
+ foreach (Bullet* obj, *mWorld->bullets()) {
+ mShaderManager->setLight("point");
+ mShaderManager->setLightColor(Vector3f(2.0, 1.6, 0.8));
+ mShaderManager->setLightRadius(200);
+ Vector3f lightPos = (camera()->modelviewMatrix() * obj->position());
+ // kDebug() << "Light pos:" << lightPos.x() << lightPos.y() << \
lightPos.z() << lightPos.w(); + \
mShaderManager->setLightPosition(lightPos.start<3>()); + \
renderObjects(mWorld->objects()); + }
+
// Restore states
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
--- trunk/playground/games/astrododge/src/loadingview.cpp #1002015:1002016
@@ -23,6 +23,7 @@
#include "planet.h"
#include "model.h"
#include "datastore.h"
+#include "shadermanager.h"
#include <kgllib/textrenderer.h>
#include <kgllib/geometrybuffer.h>
@@ -55,7 +56,8 @@
mStateInfos[Load_ObjectModelInfos] = LoadingStateInfo( 45, "Loading object \
models");
mStateInfos[Load_FinalizeModels] = LoadingStateInfo( 50, "Finalizing \
models");
mStateInfos[Load_AssignObjectModels] = LoadingStateInfo( 55, "Creating \
objects");
- mStateInfos[Load_AssignAsteroidModels] = LoadingStateInfo( 98, "Creating \
asteroids"); + mStateInfos[Load_AssignAsteroidModels] = LoadingStateInfo( 95, \
"Creating asteroids"); + mStateInfos[Load_PrecompileShaders] = \
LoadingStateInfo( 98, "Compiling shaders");
mStateInfos[Load_Done] = LoadingStateInfo(100, "Starting \
game"); }
@@ -202,6 +204,28 @@
i++;
}
+ updateProgress(Load_PrecompileShaders);
+ QStringList lightTypes;
+ QSet<QString> materials;
+ lightTypes << "directional" << "spot" << "point";
+ materials << "asteroid";
+ foreach (const QString& modelName, mModel2Objects.keys()) {
+ materials << mWorld->data()->model(modelName)->material();
+ }
+
+ foreach (const QString& material, materials) {
+ // For "light" renderMode, use all light types
+ foreach (const QString& light, lightTypes) {
+ if (!mWorld->data()->shaderManager()->precompileProgram("light", light, \
material)) { + return false;
+ }
+ }
+ // For "ambient" mode, just use "directional"
+ if (!mWorld->data()->shaderManager()->precompileProgram("ambient", \
"directional", material)) { + return false;
+ }
+ }
+
updateProgress(Load_Done);
return true;
}
--- trunk/playground/games/astrododge/src/loadingview.h #1002015:1002016
@@ -79,6 +79,7 @@
Load_FinalizeModels,
Load_AssignObjectModels,
Load_AssignAsteroidModels,
+ Load_PrecompileShaders,
Load_Done
};
struct LoadingStateInfo
--- trunk/playground/games/astrododge/src/shadermanager.cpp #1002015:1002016
@@ -68,6 +68,21 @@
return prog;
}
+bool ShaderManager::precompileProgram(const QString& renderMode, const QString& \
lightType, const QString& material) +{
+ ShaderInfo info;
+ info.renderMode = renderMode;
+ info.lightType = lightType;
+ info.materialType = material;
+
+ Program* prog = compileProgram(info);
+ if (!prog) {
+ return false;
+ }
+ mPrograms.insert(info, prog);
+ return true;
+}
+
void ShaderManager::disableShader()
{
if (mActiveProgram) {
--- trunk/playground/games/astrododge/src/shadermanager.h #1002015:1002016
@@ -37,6 +37,8 @@
KGLLib::Program* activateShader();
void disableShader();
+ bool precompileProgram(const QString& renderMode, const QString& lightType, \
const QString& material); +
void setNoLight();
void setLight(const QString& type);
void setLightColor(const Eigen::Vector3f& color);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic