summaryrefslogtreecommitdiff
path: root/ivi-layermanagement-examples
diff options
context:
space:
mode:
authorEmre Ucan <eucan@de.adit-jv.com>2016-04-18 13:17:10 +0200
committerEugen Friedrich <efriedrich@de.adit-jv.com>2016-04-19 16:09:58 +0200
commit46590fd88f1e419622b88ddf6a1f5bde80841f75 (patch)
treef6e80bf9a678809067386bf45976e9bf796de6a4 /ivi-layermanagement-examples
parent44598504503eea5ac7f94c88477a5a78bda01f30 (diff)
downloadwayland-ivi-extension-46590fd88f1e419622b88ddf6a1f5bde80841f75.tar.gz
EGLWLMockNavigation: remove IlmMatrix dependency
IlmMatrix dependency is removed, because it has a different license than the license of wayland-ivi-extension (i.e Apache 2.0). This license problem is reported by Jeremiah C. Foster. He also raised the ticket "BUG 432" in http://bugs.genivi.org/ I replaced the IlmMatrix implementation with my own implementation to fix the issue. Signed-off-by: Emre Ucan <eucan@de.adit-jv.com>
Diffstat (limited to 'ivi-layermanagement-examples')
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/CMakeLists.txt1
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/include/Camera.h23
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/include/Ground.h1
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/include/House.h1
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderBase.h6
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderLighting.h2
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/Camera.cpp108
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/Ground.cpp1
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/House.cpp1
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/MockNavi.cpp2
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderBase.cpp5
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderLighting.cpp27
-rw-r--r--ivi-layermanagement-examples/EGLWLMockNavigation/src/Street.cpp1
13 files changed, 134 insertions, 45 deletions
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/CMakeLists.txt b/ivi-layermanagement-examples/EGLWLMockNavigation/CMakeLists.txt
index d319ee9..cf61ef0 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/CMakeLists.txt
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/CMakeLists.txt
@@ -72,7 +72,6 @@ set (SRC_FILES
src/ShaderBase.cpp
src/ShaderLighting.cpp
src/main.cpp
- src/IlmMatrix.cpp
)
add_executable(${PROJECT_NAME}
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/include/Camera.h b/ivi-layermanagement-examples/EGLWLMockNavigation/include/Camera.h
index c0e3cbd..f3ae70b 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/include/Camera.h
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/include/Camera.h
@@ -20,7 +20,6 @@
#define _CAMERA_H
#include "IUpdateable.h"
-#include "IlmMatrix.h"
#include "vec.h"
class Camera : public IUpdateable
@@ -29,17 +28,27 @@ public:
Camera(vec3f position, vec3f target, float viewportWidth, float viewportHeight);
virtual ~Camera();
- IlmMatrix* getViewProjectionMatrix();
+ float* getViewProjectionMatrix();
void update(int currentTimeInMs, int lastFrameTime);
private:
vec3f m_position;
vec3f m_target;
- IlmMatrix m_viewProjectionMatrix;
- IlmMatrix m_translationMatrix;
- IlmMatrix m_rotationMatrix;
- IlmMatrix m_projectionMatrix;
- IlmMatrix m_identityMatrix;
+ float m_viewProjectionMatrix[16];
+ float m_translationMatrix[16];
+ float m_projectionMatrix[16];
+ float m_identityMatrix[16];
+
+ //Parameters for projection matrix calculation
+ float m_fov; // field of view
+ float m_near;
+ float m_far;
+ float m_aspectRatio;
+
+ void calculateTranslationMatrix();
+ void calculateProjectionMatrix();
+ void calculateViewProjectionMatrix();
+
};
#endif /* _CAMERA_H */
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/include/Ground.h b/ivi-layermanagement-examples/EGLWLMockNavigation/include/Ground.h
index d366cd8..aa52b14 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/include/Ground.h
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/include/Ground.h
@@ -22,7 +22,6 @@
#include "IRenderable.h"
#include "vec.h"
-class IlmMatrix;
class ShaderBase;
class Ground : public IRenderable
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/include/House.h b/ivi-layermanagement-examples/EGLWLMockNavigation/include/House.h
index 3604022..fa46b7b 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/include/House.h
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/include/House.h
@@ -21,7 +21,6 @@
#include "IRenderable.h"
#include "IUpdateable.h"
-#include "IlmMatrix.h"
#include "vec.h"
class ShaderBase;
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderBase.h b/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderBase.h
index cc4878b..2115537 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderBase.h
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderBase.h
@@ -24,12 +24,10 @@
#include <string>
using std::string;
-class IlmMatrix;
-
class ShaderBase
{
public:
- ShaderBase(string vertexCode, string fragmentCode, IlmMatrix* projectionMatrix);
+ ShaderBase(string vertexCode, string fragmentCode, float* projectionMatrix);
virtual ~ShaderBase();
virtual void use(vec3f* position, vec4f* color);
@@ -48,7 +46,7 @@ private:
private:
string m_vertexCode;
string m_fragmentCode;
- IlmMatrix* m_projectionMatrix;
+ float* m_projectionMatrix;
};
#endif // __SHADERBASE_H__
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderLighting.h b/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderLighting.h
index 1f74273..f47c36d 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderLighting.h
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/include/ShaderLighting.h
@@ -23,7 +23,7 @@
class ShaderLighting: public ShaderBase {
public:
- ShaderLighting(IlmMatrix* projectionMatrix);
+ ShaderLighting(float* projectionMatrix);
virtual ~ShaderLighting();
virtual void use(vec3f* position, vec4f* color);
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Camera.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Camera.cpp
index b71cd87..72988fa 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Camera.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Camera.cpp
@@ -28,35 +28,107 @@ Camera::Camera(vec3f position, vec3f target, float viewportWidth, float viewport
: m_position(position)
, m_target(target)
{
- IlmMatrixIdentity(m_identityMatrix);
- IlmMatrixTranslation(m_translationMatrix, m_position.x, m_position.y, m_position.z);
- IlmMatrixRotateX(m_rotationMatrix, 45.0);
- IlmMatrixProjection(m_projectionMatrix,
- 45.0, // field of view
- 0.1f, // near
- 1000.0f, // far
- viewportWidth/viewportHeight); // aspect ratio
- m_viewProjectionMatrix = m_identityMatrix;
+ calculateTranslationMatrix();
+
+ m_fov = M_PI / 4; // 45°
+ m_near = 0.1f;
+ m_far = 1000.0f;
+ m_aspectRatio = viewportWidth/viewportHeight;
+ calculateProjectionMatrix();
+ calculateViewProjectionMatrix();
}
Camera::~Camera()
{
}
-IlmMatrix* Camera::getViewProjectionMatrix()
+void Camera::calculateProjectionMatrix()
+{
+ // Precompute borders for projection
+ float range = m_near * tan(m_fov / 2.0);
+ float right = range * m_aspectRatio;
+ float top = range;
+
+ // Column 1
+ m_projectionMatrix[0] = m_near / right;
+ m_projectionMatrix[1] = 0.0;
+ m_projectionMatrix[2] = 0.0;
+ m_projectionMatrix[3] = 0.0;
+
+ // Column 2
+ m_projectionMatrix[4] = 0.0;
+ m_projectionMatrix[5] = m_near / top;
+ m_projectionMatrix[6] = 0.0;
+ m_projectionMatrix[7] = 0.0;
+
+ // Column 3
+ m_projectionMatrix[8] = 0.0;
+ m_projectionMatrix[9] = 0.0;
+ m_projectionMatrix[10] = -(m_far + m_near) / (m_far - m_near);
+ m_projectionMatrix[11] = -1;
+
+ // Column 4
+ m_projectionMatrix[12] = 0.0;
+ m_projectionMatrix[13] = 0.0;
+ m_projectionMatrix[14] = -(2 * m_far * m_near) / (m_far - m_near);
+ m_projectionMatrix[15] = 0.0;
+}
+
+void Camera::calculateTranslationMatrix()
{
- return &m_viewProjectionMatrix;
+ m_translationMatrix[0] = 1.0f;
+ m_translationMatrix[1] = 0.0f;
+ m_translationMatrix[2] = 0.0f;
+ m_translationMatrix[3] = 0.0f;
+
+ m_translationMatrix[4] = 0.0f;
+ m_translationMatrix[5] = 1.0f;
+ m_translationMatrix[6] = 0.0f;
+ m_translationMatrix[7] = 0.0f;
+
+ m_translationMatrix[8] = 0.0f;
+ m_translationMatrix[9] = 0.0f;
+ m_translationMatrix[10] = 1.0f;
+ m_translationMatrix[11] = 0.0f;
+
+ m_translationMatrix[12] = m_position.x;
+ m_translationMatrix[13] = m_position.y;
+ m_translationMatrix[14] = m_position.z;
+ m_translationMatrix[15] = 1.0f;
+}
+
+void Camera::calculateViewProjectionMatrix()
+{
+
+ m_viewProjectionMatrix[0] = m_translationMatrix[0] * m_projectionMatrix[0];
+ m_viewProjectionMatrix[1] = 0.0f;
+ m_viewProjectionMatrix[2] = 0.0f;
+ m_viewProjectionMatrix[3] = 0.0f;
+
+ m_viewProjectionMatrix[4] = 0.0f;
+ m_viewProjectionMatrix[5] = m_translationMatrix[5] * m_projectionMatrix[5];
+ m_viewProjectionMatrix[6] = 0.0f;
+ m_viewProjectionMatrix[7] = 0.0f;
+
+ m_viewProjectionMatrix[8] = 0.0f;
+ m_viewProjectionMatrix[9] = 0.0f;
+ m_viewProjectionMatrix[10] = m_translationMatrix[10] * m_projectionMatrix[10];
+ m_viewProjectionMatrix[11] = m_translationMatrix[10] * m_projectionMatrix[11];
+
+ m_viewProjectionMatrix[12] = m_translationMatrix[12] * m_projectionMatrix[0];
+ m_viewProjectionMatrix[13] = m_translationMatrix[13] * m_projectionMatrix[5];
+ m_viewProjectionMatrix[14] = m_translationMatrix[14] * m_projectionMatrix[10]
+ + m_translationMatrix[15] * m_projectionMatrix[14];
+ m_viewProjectionMatrix[15] = m_translationMatrix[14] * m_projectionMatrix[11];
+}
+
+float* Camera::getViewProjectionMatrix()
+{
+ return m_viewProjectionMatrix;
}
void Camera::update(int currentTimeInMs, int lastFrameTime)
{
(void)currentTimeInMs; // prevent warning
(void)lastFrameTime; // prevent warning
-
- IlmMatrixTranslation(m_translationMatrix, m_position.x, m_position.y, m_position.z);
-
- m_viewProjectionMatrix = m_identityMatrix;
- //IlmMatrixMultiply(m_viewProjectionMatrix, m_viewProjectionMatrix, m_rotationMatrix);
- IlmMatrixMultiply(m_viewProjectionMatrix, m_viewProjectionMatrix, m_translationMatrix);
- IlmMatrixMultiply(m_viewProjectionMatrix, m_viewProjectionMatrix, m_projectionMatrix);
}
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Ground.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Ground.cpp
index 5024d0d..77316dc 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Ground.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Ground.cpp
@@ -18,7 +18,6 @@
*
****************************************************************************/
#include "Ground.h"
-#include "IlmMatrix.h"
#include "ShaderLighting.h"
#include <string.h>
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/House.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/House.cpp
index 91dbba2..fe11396 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/House.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/House.cpp
@@ -18,7 +18,6 @@
*
****************************************************************************/
#include "House.h"
-#include "IlmMatrix.h"
#include "ShaderLighting.h"
#include <string.h>
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/MockNavi.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/MockNavi.cpp
index 8bdf937..a6338e6 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/MockNavi.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/MockNavi.cpp
@@ -66,7 +66,7 @@ void MockNavi::render()
void MockNavi::generateCity()
{
- IlmMatrix* projection = m_camera.getViewProjectionMatrix();
+ float* projection = m_camera.getViewProjectionMatrix();
ShaderLighting* pShader = new ShaderLighting(projection);
// generate base plate
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderBase.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderBase.cpp
index 02f40fc..7bcfcbb 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderBase.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderBase.cpp
@@ -17,14 +17,13 @@
*
****************************************************************************/
#include "ShaderBase.h"
-#include "IlmMatrix.h"
#include <ilm_client.h>
#include <GLES2/gl2.h>
#include <stdlib.h>
#include <iostream>
using std::cout;
-ShaderBase::ShaderBase(string vertexCode, string fragmentCode, IlmMatrix* projectionMatrix)
+ShaderBase::ShaderBase(string vertexCode, string fragmentCode, float* projectionMatrix)
: m_vertexCode()
, m_fragmentCode(fragmentCode)
, m_projectionMatrix(projectionMatrix)
@@ -171,5 +170,5 @@ void ShaderBase::use(vec3f* position, vec4f* color)
(void)color; // prevent warning
glUseProgram(shaderProgramId);
- glUniformMatrix4fv(m_uniformProjectionMatrix, 1, GL_FALSE, m_projectionMatrix->f);
+ glUniformMatrix4fv(m_uniformProjectionMatrix, 1, GL_FALSE, m_projectionMatrix);
}
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderLighting.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderLighting.cpp
index 94e49a8..d87c0e7 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderLighting.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/ShaderLighting.cpp
@@ -17,7 +17,6 @@
*
****************************************************************************/
#include "ShaderLighting.h"
-#include "IlmMatrix.h"
const char* vertexShaderCode =
"attribute mediump vec4 a_vertex; \
@@ -40,7 +39,7 @@ const char* fragmentShaderCode =
gl_FragColor.a = 1.0; \
}";
-ShaderLighting::ShaderLighting(IlmMatrix* projectionMatrix)
+ShaderLighting::ShaderLighting(float* projectionMatrix)
: ShaderBase(vertexShaderCode, fragmentShaderCode, projectionMatrix)
{
glUseProgram(shaderProgramId);
@@ -56,11 +55,29 @@ void ShaderLighting::use(vec3f* position, vec4f* color)
{
ShaderBase::use(position, color);
- IlmMatrix translation;
- IlmMatrixTranslation(translation, position->x, position->y, position->z);
+ float translation[16];
+ translation[0] = 1.0f;
+ translation[1] = 0.0f;
+ translation[2] = 0.0f;
+ translation[3] = 0.0f;
+
+ translation[4] = 0.0f;
+ translation[5] = 1.0f;
+ translation[6] = 0.0f;
+ translation[7] = 0.0f;
+
+ translation[8] = 0.0f;
+ translation[9] = 0.0f;
+ translation[10] = 1.0f;
+ translation[11] = 0.0f;
+
+ translation[12] = position->x;
+ translation[13] = position->y;
+ translation[14] = position->z;
+ translation[15] = 1.0f;
glUseProgram(shaderProgramId);
- glUniformMatrix4fv(m_uniformModelMatrix, 1, GL_FALSE, translation.f);
+ glUniformMatrix4fv(m_uniformModelMatrix, 1, GL_FALSE, translation);
glUniform4fv(m_uniformColor, 1, &color->r);
}
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Street.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Street.cpp
index 8373a93..6ee6e1d 100644
--- a/ivi-layermanagement-examples/EGLWLMockNavigation/src/Street.cpp
+++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/Street.cpp
@@ -18,7 +18,6 @@
*
****************************************************************************/
#include "Street.h"
-#include "IlmMatrix.h"
#include "ShaderBase.h"
#include <string.h>