aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/slice_renderer.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2016-09-10 18:16:17 +0200
committerEugene Sandulenko2016-09-29 22:33:40 +0200
commitb67bca20b5db7f3d6473341efd7fabfa6532f465 (patch)
tree6fbbd28dc707dac1c3cacde2e8622cceea6d1b0f /engines/bladerunner/slice_renderer.cpp
parent2888d0b3460cdca2dd52f8d6aa94b429d46345ad (diff)
downloadscummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.tar.gz
scummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.tar.bz2
scummvm-rg350-b67bca20b5db7f3d6473341efd7fabfa6532f465.zip
BLADERUNNER: Pull in changes from madmoose
Diffstat (limited to 'engines/bladerunner/slice_renderer.cpp')
-rw-r--r--engines/bladerunner/slice_renderer.cpp49
1 files changed, 21 insertions, 28 deletions
diff --git a/engines/bladerunner/slice_renderer.cpp b/engines/bladerunner/slice_renderer.cpp
index 389d818e6f..581bed2e22 100644
--- a/engines/bladerunner/slice_renderer.cpp
+++ b/engines/bladerunner/slice_renderer.cpp
@@ -23,10 +23,9 @@
#include "bladerunner/slice_renderer.h"
#include "bladerunner/bladerunner.h"
-#include "bladerunner/slice_animations.h"
#include "bladerunner/lights.h"
-#include "bladerunner/scene.h"
-#include "bladerunner/set.h"
+#include "bladerunner/set_effects.h"
+#include "bladerunner/slice_animations.h"
#include "common/debug.h"
#include "common/memstream.h"
@@ -54,10 +53,9 @@ void dump(const char *str, Matrix4x3 m) {
}
#endif
-
SliceRenderer::SliceRenderer(BladeRunnerEngine* vm) {
_vm = vm;
- int i;
+ int i;
for (i = 0; i < 942; i++) { // yes, its going just to 942 and not 997
_animationsShadowEnabled[i] = true;
@@ -67,10 +65,18 @@ SliceRenderer::SliceRenderer(BladeRunnerEngine* vm) {
SliceRenderer::~SliceRenderer() {
}
-void SliceRenderer::setView(View *view) {
+void SliceRenderer::setView(const View &view) {
_view = view;
}
+void SliceRenderer::setLights(Lights* lights){
+ _lights = lights;
+}
+
+void SliceRenderer::setSetEffects(SetEffects* setEffects){
+ _setEffects = setEffects;
+}
+
void SliceRenderer::setupFrame(int animation, int frame, Vector3 position, float facing, float scale) {
_animation = animation;
_frame = frame;
@@ -97,7 +103,7 @@ void SliceRenderer::setupFrame(int animation, int frame, Vector3 position, float
Matrix3x2 SliceRenderer::calculateFacingRotationMatrix() {
assert(_sliceFramePtr);
- Matrix4x3 viewMatrix = _view->_sliceViewMatrix;
+ Matrix4x3 viewMatrix = _view._sliceViewMatrix;
Vector3 viewPos = viewMatrix * _position;
float dir = atan2f(viewPos.x, viewPos.z) + _facing;
float s = sinf(dir);
@@ -120,7 +126,7 @@ void SliceRenderer::calculateBoundingRect() {
_minY = 0.0f;
_maxY = 0.0f;
- Matrix4x3 viewMatrix = _view->_sliceViewMatrix;
+ Matrix4x3 viewMatrix = _view._sliceViewMatrix;
Vector3 frameBottom = Vector3(0.0f, 0.0f, _frameBottomZ);
Vector3 frameTop = Vector3(0.0f, 0.0f, _frameBottomZ + _frameSliceCount * _frameSliceHeight);
@@ -135,7 +141,7 @@ void SliceRenderer::calculateBoundingRect() {
Matrix3x2 facingRotation = calculateFacingRotationMatrix();
- Matrix3x2 m4(_view->_viewportDistance / bottom.z, 0.0f, 0.0f,
+ Matrix3x2 m4(_view._viewportDistance / bottom.z, 0.0f, 0.0f,
0.0f, 25.5f, 0.0f);
Matrix3x2 m2(_frameFront.x, 0.0f, _framePos.x,
@@ -143,13 +149,13 @@ void SliceRenderer::calculateBoundingRect() {
_field_109E = m4 * (facingRotation * m2);
- Vector4 B6(_view->_viewportHalfWidth + top.x / top.z * _view->_viewportDistance,
- _view->_viewportHalfHeight + top.y / top.z * _view->_viewportDistance,
+ Vector4 B6(_view._viewportHalfWidth + top.x / top.z * _view._viewportDistance,
+ _view._viewportHalfHeight + top.y / top.z * _view._viewportDistance,
1.0f / top.z,
_frameSliceCount * (1.0f / top.z));
- Vector4 C2(_view->_viewportHalfWidth + bottom.x / bottom.z * _view->_viewportDistance,
- _view->_viewportHalfHeight + bottom.y / bottom.z * _view->_viewportDistance,
+ Vector4 C2(_view._viewportHalfWidth + bottom.x / bottom.z * _view._viewportDistance,
+ _view._viewportHalfHeight + bottom.y / bottom.z * _view._viewportDistance,
1.0f / bottom.z,
0.0f);
@@ -337,9 +343,6 @@ void setupLookupTable(int t[256], int inc) {
void SliceRenderer::drawFrame(Graphics::Surface &surface, uint16 *zbuffer) {
assert(_sliceFramePtr);
- assert(_lights);
- assert(_setEffects);
- assert(_view);
SliceLineIterator sliceLineIterator;
sliceLineIterator.setup(
@@ -349,9 +352,6 @@ void SliceRenderer::drawFrame(Graphics::Surface &surface, uint16 *zbuffer) {
_field_109E // 3x2 matrix
);
- _lights->setupFrame(_view->_frame);
- _setEffects->setupFrame(_view->_frame);
-
setupLookupTable(_t1, sliceLineIterator._field_00[0][0]);
setupLookupTable(_t2, sliceLineIterator._field_00[0][1]);
setupLookupTable(_t4, sliceLineIterator._field_00[1][0]);
@@ -426,17 +426,10 @@ void SliceRenderer::drawSlice(int slice, uint16 *frameLinePtr, uint16 *zbufLineP
}
}
-void SliceRenderer::setLights(Lights* lights){
- _lights = lights;
-}
-
-void SliceRenderer::setSetEffects(SetEffects* setEffects){
- _setEffects = setEffects;
-}
-
void SliceRenderer::preload(int animationId) {
int i;
- for (i = 0; i < _vm->_sliceAnimations->getNumberOfFrames(animationId); i++)
+ int frameCount = _vm->_sliceAnimations->getFrameCount(animationId);
+ for (i = 0; i < frameCount; i++)
_vm->_sliceAnimations->getFramePtr(animationId, i);
}