Skip to content

Commit

Permalink
UPBGE: Move camera zoom setting in BL_Converter and RAS_CameraData.
Browse files Browse the repository at this point in the history
The camera zoom setting was previously only stored into the ketsji engine,
to avoid storing a setting only for override camera, this zoom is stored
in RAS_CameraData. Then the override camera zoom is initialized easily
from LA_BlenderPlayer and for other camera, the zoom is copied from
BL_Converter global zoom variable (m_camZoom) initialized at the converter
construction from the launcher.
  • Loading branch information
panzergame committed Jun 14, 2018
1 parent 646ae9d commit 3257be1
Show file tree
Hide file tree
Showing 16 changed files with 38 additions and 87 deletions.
13 changes: 7 additions & 6 deletions source/gameengine/Converter/BL_BlenderDataConversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -793,10 +793,10 @@ static KX_LightObject *BL_GameLightFromBlenderLamp(Lamp *la, unsigned int layerf
return gamelight;
}

static KX_Camera *BL_GameCameraFromBlenderCamera(Object *ob, KX_Scene *kxscene, RAS_ICanvas *canvas)
static KX_Camera *BL_GameCameraFromBlenderCamera(Object *ob, KX_Scene *kxscene, RAS_ICanvas *canvas, float camZoom)
{
Camera *ca = static_cast<Camera *>(ob->data);
RAS_CameraData camdata(ca->lens, ca->ortho_scale, ca->sensor_x, ca->sensor_y, ca->sensor_fit, ca->shiftx, ca->shifty, ca->clipsta, ca->clipend, ca->type == CAM_PERSP, ca->YF_dofdist);
RAS_CameraData camdata(ca->lens, ca->ortho_scale, ca->sensor_x, ca->sensor_y, ca->sensor_fit, ca->shiftx, ca->shifty, ca->clipsta, ca->clipend, ca->type == CAM_PERSP, ca->YF_dofdist, camZoom);
KX_Camera *gamecamera;

gamecamera = new KX_Camera(kxscene, KX_Scene::m_callbacks, camdata);
Expand Down Expand Up @@ -835,7 +835,7 @@ static KX_Camera *BL_GameCameraFromBlenderCamera(Object *ob, KX_Scene *kxscene,
}

static KX_GameObject *BL_GameObjectFromBlenderObject(Object *ob, KX_Scene *kxscene, RAS_Rasterizer *rendertools,
RAS_ICanvas *canvas, BL_SceneConverter &converter)
RAS_ICanvas *canvas, BL_SceneConverter &converter, float camZoom)
{
KX_GameObject *gameobj = nullptr;
Scene *blenderscene = kxscene->GetBlenderScene();
Expand All @@ -853,7 +853,7 @@ static KX_GameObject *BL_GameObjectFromBlenderObject(Object *ob, KX_Scene *kxsce

case OB_CAMERA:
{
KX_Camera *gamecamera = BL_GameCameraFromBlenderCamera(ob, kxscene, canvas);
KX_Camera *gamecamera = BL_GameCameraFromBlenderCamera(ob, kxscene, canvas, camZoom);
gameobj = gamecamera;

kxscene->GetCameraList()->Add(CM_AddRef(gamecamera));
Expand Down Expand Up @@ -1185,6 +1185,7 @@ void BL_ConvertBlenderObjects(struct Main *maggie,
RAS_ICanvas *canvas,
BL_SceneConverter& converter,
bool alwaysUseExpandFraming,
float camZoom,
bool libloading)
{

Expand Down Expand Up @@ -1323,7 +1324,7 @@ void BL_ConvertBlenderObjects(struct Main *maggie,
Object *blenderobject = base->object;
allblobj.insert(blenderobject);

KX_GameObject *gameobj = BL_GameObjectFromBlenderObject(base->object, kxscene, rendertools, canvas, converter);
KX_GameObject *gameobj = BL_GameObjectFromBlenderObject(base->object, kxscene, rendertools, canvas, converter, camZoom);

bool isInActiveLayer = (blenderobject->lay & activeLayerBitInfo) != 0;
if (gameobj) {
Expand Down Expand Up @@ -1360,7 +1361,7 @@ void BL_ConvertBlenderObjects(struct Main *maggie,
if (!converter.FindGameObject(blenderobject)) {
allblobj.insert(blenderobject);
groupobj.insert(blenderobject);
KX_GameObject *gameobj = BL_GameObjectFromBlenderObject(blenderobject, kxscene, rendertools, canvas, converter);
KX_GameObject *gameobj = BL_GameObjectFromBlenderObject(blenderobject, kxscene, rendertools, canvas, converter, camZoom);

bool isInActiveLayer = false;
if (gameobj) {
Expand Down
2 changes: 1 addition & 1 deletion source/gameengine/Converter/BL_BlenderDataConversion.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ void BL_ConvertDerivedMeshToArray(DerivedMesh *dm, Mesh *me, const std::vector<B

void BL_ConvertBlenderObjects(Main *maggie, KX_Scene *kxscene, KX_KetsjiEngine *ketsjiEngine, e_PhysicsEngine physics_engine,
RAS_Rasterizer *rendertools, RAS_ICanvas *canvas, BL_SceneConverter& sceneconverter,
bool alwaysUseExpandFraming, bool libloading);
bool alwaysUseExpandFraming, float camZoom, bool libloading);

SCA_IInputDevice::SCA_EnumInputs BL_ConvertKeyCode(int key_code);

Expand Down
11 changes: 4 additions & 7 deletions source/gameengine/Converter/BL_Converter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,10 +126,11 @@ void BL_Converter::SceneSlot::Merge(const BL_SceneConverter& converter)
}
}

BL_Converter::BL_Converter(Main *maggie, KX_KetsjiEngine *engine)
BL_Converter::BL_Converter(Main *maggie, KX_KetsjiEngine *engine, bool alwaysUseExpandFraming, float camZoom)
:m_maggie(maggie),
m_ketsjiEngine(engine),
m_alwaysUseExpandFraming(false)
m_alwaysUseExpandFraming(alwaysUseExpandFraming),
m_camZoom(camZoom)
{
BKE_main_id_tag_all(maggie, LIB_TAG_DOIT, false); // avoid re-tagging later on
m_threadinfo.m_pool = BLI_task_pool_create(engine->GetTaskScheduler(), nullptr);
Expand Down Expand Up @@ -231,6 +232,7 @@ void BL_Converter::ConvertScene(BL_SceneConverter& converter, bool libloading)
m_ketsjiEngine->GetCanvas(),
converter,
m_alwaysUseExpandFraming,
m_camZoom,
libloading);

m_sceneSlots.emplace(scene, converter);
Expand Down Expand Up @@ -272,11 +274,6 @@ void BL_Converter::RemoveScene(KX_Scene *scene)
m_sceneSlots.erase(scene);
}

void BL_Converter::SetAlwaysUseExpandFraming(bool to_what)
{
m_alwaysUseExpandFraming = to_what;
}

void BL_Converter::RegisterInterpolatorList(KX_Scene *scene, BL_InterpolatorList *interpolator, bAction *for_act)
{
SceneSlot& sceneSlot = m_sceneSlots[scene];
Expand Down
5 changes: 2 additions & 3 deletions source/gameengine/Converter/BL_Converter.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,10 @@ class BL_Converter

KX_KetsjiEngine *m_ketsjiEngine;
bool m_alwaysUseExpandFraming;
float m_camZoom;

public:
BL_Converter(Main *maggie, KX_KetsjiEngine *engine);
BL_Converter(Main *maggie, KX_KetsjiEngine *engine, bool alwaysUseExpandFraming, float camZoom);
virtual ~BL_Converter();

void ConvertScene(BL_SceneConverter& converter, bool libloading);
Expand All @@ -129,8 +130,6 @@ class BL_Converter
*/
void RemoveScene(KX_Scene *scene);

void SetAlwaysUseExpandFraming(bool to_what);

void RegisterInterpolatorList(KX_Scene *scene, BL_InterpolatorList *interpolator, bAction *for_act);
BL_InterpolatorList *FindInterpolatorList(KX_Scene *scene, bAction *for_act);
/// Register a mesh object copy.
Expand Down
5 changes: 4 additions & 1 deletion source/gameengine/Ketsji/KX_Camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,10 @@ float KX_Camera::GetFocalLength() const
return m_camdata.m_focallength;
}


float KX_Camera::GetZoom() const
{
return m_camdata.m_zoom;
}

RAS_CameraData *KX_Camera::GetCameraData()
{
Expand Down
3 changes: 2 additions & 1 deletion source/gameengine/Ketsji/KX_Camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ class KX_Camera : public KX_GameObject

KX_Camera(void* sgReplicationInfo,SG_Callbacks callbacks,const RAS_CameraData& camdata, bool frustum_culling = true);
virtual ~KX_Camera();

/**
* Inherited from EXP_Value -- return a new copy of this
* instance allocated on the heap. Ownership of the new
Expand Down Expand Up @@ -171,6 +171,7 @@ class KX_Camera : public KX_GameObject
float GetCameraFar() const;
/** Gets the focal length (only used for stereo rendering) */
float GetFocalLength() const;
float GetZoom() const;
/** Gets all camera data. */
RAS_CameraData* GetCameraData();

Expand Down
23 changes: 1 addition & 22 deletions source/gameengine/Ketsji/KX_KetsjiEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,6 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem *system)
m_exitkey(130),
m_exitcode(KX_ExitRequest::NO_REQUEST),
m_exitstring(""),
m_cameraZoom(1.0f),
m_overrideCamZoom(1.0f),
m_logger(KX_TimeCategoryLogger(25)),
m_average_framerate(0.0),
m_showBoundingBox(KX_DebugOption::DISABLE),
Expand Down Expand Up @@ -757,25 +755,6 @@ const std::string& KX_KetsjiEngine::GetExitString()
return m_exitstring;
}

void KX_KetsjiEngine::SetCameraZoom(float camzoom)
{
m_cameraZoom = camzoom;
}

void KX_KetsjiEngine::SetCameraOverrideZoom(float camzoom)
{
m_overrideCamZoom = camzoom;
}

float KX_KetsjiEngine::GetCameraZoom(KX_Camera *camera) const
{
KX_Scene *scene = camera->GetScene();
const bool overrideCamera = ((m_flags & CAMERA_OVERRIDE) != 0) && (scene->GetName() == m_overrideSceneName) &&
(camera->GetName() == "__default__cam__");

return overrideCamera ? m_overrideCamZoom : m_cameraZoom;
}

void KX_KetsjiEngine::EnableCameraOverride(const std::string& forscene, const mt::mat4& projmat,
const mt::mat4& viewmat, const RAS_CameraData& camdata)
{
Expand Down Expand Up @@ -910,7 +889,7 @@ mt::mat4 KX_KetsjiEngine::GetCameraProjectionMatrix(KX_Scene *scene, KX_Camera *
const float farfrust = cam->GetCameraFar();
const float focallength = cam->GetFocalLength();

const float camzoom = override_camera ? m_overrideCamZoom : m_cameraZoom;
const float camzoom = cam->GetZoom();
if (orthographic) {

RAS_FramingManager::ComputeOrtho(
Expand Down
11 changes: 0 additions & 11 deletions source/gameengine/Ketsji/KX_KetsjiEngine.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,14 +202,10 @@ class KX_KetsjiEngine : public mt::SimdClassAllocator
KX_ExitRequest m_exitcode;
std::string m_exitstring;

float m_cameraZoom;

std::string m_overrideSceneName;
RAS_CameraData m_overrideCamData;
mt::mat4 m_overrideCamProjMat;
mt::mat4 m_overrideCamViewMat;
/// Default camera zoom.
float m_overrideCamZoom;

/// Categories for profiling display.
typedef enum {
Expand Down Expand Up @@ -373,13 +369,6 @@ class KX_KetsjiEngine : public mt::SimdClassAllocator

void GetSceneViewport(KX_Scene *scene, KX_Camera *cam, const RAS_Rect& displayArea, RAS_Rect& area, RAS_Rect& viewport);

/// Sets zoom for camera objects, useful only with extend and scale framing mode.
void SetCameraZoom(float camzoom);
/// Sets zoom for default camera, = 2 in embedded mode.
void SetCameraOverrideZoom(float camzoom);
/// Get the camera zoom for the passed camera.
float GetCameraZoom(KX_Camera *camera) const;

void EnableCameraOverride(const std::string& forscene, const mt::mat4& projmat, const mt::mat4& viewmat, const RAS_CameraData& camdata);

// Update animations for object in this scene
Expand Down
5 changes: 1 addition & 4 deletions source/gameengine/Ketsji/KX_PlanarMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
#include "KX_PlanarMap.h"
#include "KX_Camera.h"
#include "KX_PyMath.h"
#include "KX_Globals.h"

#include "RAS_Rasterizer.h"
#include "RAS_Texture.h"
Expand Down Expand Up @@ -121,9 +120,7 @@ const mt::mat4& KX_PlanarMap::GetProjectionMatrix(RAS_Rasterizer *rasty, KX_Scen
}

if (!sceneCamera->GetViewport()) {
KX_KetsjiEngine *engine = KX_GetActiveEngine();
const float camzoom = engine->GetCameraZoom(sceneCamera);

const float camzoom = sceneCamera->GetZoom();
frustum.x1 *= camzoom;
frustum.x2 *= camzoom;
frustum.y1 *= camzoom;
Expand Down
18 changes: 3 additions & 15 deletions source/gameengine/Launcher/LA_BlenderLauncher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,10 @@ extern "C" {

LA_BlenderLauncher::LA_BlenderLauncher(GHOST_ISystem *system, Main *maggie, Scene *scene, GlobalSettings *gs, RAS_Rasterizer::StereoMode stereoMode,
int argc, char **argv, bContext *context, rcti *camframe, ARegion *ar, int alwaysUseExpandFraming)
:LA_Launcher(system, maggie, scene, gs, stereoMode, scene->gm.aasamples, argc, argv),
:LA_Launcher(system, maggie, scene, gs, stereoMode, scene->gm.aasamples, alwaysUseExpandFraming, argc, argv),
m_context(context),
m_ar(ar),
m_camFrame(camframe),
m_alwaysUseExpandFraming(alwaysUseExpandFraming),
m_drawLetterBox(false)
{
m_windowManager = CTX_wm_manager(m_context);
Expand Down Expand Up @@ -100,36 +99,25 @@ RAS_Rasterizer::DrawType LA_BlenderLauncher::GetRasterizerDrawMode()
return drawmode;
}

bool LA_BlenderLauncher::GetUseAlwaysExpandFraming()
{
return m_alwaysUseExpandFraming;
}

void LA_BlenderLauncher::InitCamera()
{
RegionView3D *rv3d = CTX_wm_region_view3d(m_context);

// Some blender stuff.
float camzoom = 1.0f;

if (rv3d->persp == RV3D_CAMOB) {
if (m_startScene->gm.framing.type == SCE_GAMEFRAMING_BARS) { /* Letterbox */
m_drawLetterBox = true;
}
else {
camzoom = 1.0f / BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
m_camZoom = 1.0f / BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
}
}

m_ketsjiEngine->SetCameraZoom(camzoom);
m_ketsjiEngine->SetCameraOverrideZoom(2.0f);

if (rv3d->persp != RV3D_CAMOB) {
RAS_CameraData camdata = RAS_CameraData();
camdata.m_lens = m_view3d->lens;
camdata.m_clipstart = m_view3d->near;
camdata.m_clipend = m_view3d->far;
camdata.m_perspective = (rv3d->persp != RV3D_ORTHO);
camdata.m_zoom = 2.0f;

m_ketsjiEngine->EnableCameraOverride(m_startSceneName, mt::mat4(rv3d->winmat), mt::mat4(rv3d->viewmat), camdata);
}
Expand Down
1 change: 0 additions & 1 deletion source/gameengine/Launcher/LA_BlenderLauncher.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ class LA_BlenderLauncher : public LA_Launcher

virtual RAS_ICanvas *CreateCanvas(RAS_Rasterizer *rasty);
virtual RAS_Rasterizer::DrawType GetRasterizerDrawMode();
virtual bool GetUseAlwaysExpandFraming();
virtual void InitCamera();

virtual void SetWindowOrder(short order);
Expand Down
8 changes: 4 additions & 4 deletions source/gameengine/Launcher/LA_Launcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ extern "C" {
#endif

LA_Launcher::LA_Launcher(GHOST_ISystem *system, Main *maggie, Scene *scene, GlobalSettings *gs,
RAS_Rasterizer::StereoMode stereoMode, int samples, int argc, char **argv)
RAS_Rasterizer::StereoMode stereoMode, int samples, bool alwaysUseExpandFraming, int argc, char **argv)
:m_startSceneName(scene->id.name + 2),
m_startScene(scene),
m_maggie(maggie),
Expand All @@ -98,6 +98,8 @@ LA_Launcher::LA_Launcher(GHOST_ISystem *system, Main *maggie, Scene *scene, Glob
#ifdef WITH_PYTHON
m_globalDict(nullptr),
#endif // WITH_PYTHON
m_alwaysUseExpandFraming(alwaysUseExpandFraming),
m_camZoom(1.0f),
m_samples(samples),
m_stereoMode(stereoMode),
m_argc(argc),
Expand Down Expand Up @@ -280,7 +282,7 @@ void LA_Launcher::InitEngine()
#endif // WITH_PYTHON

// Create a scene converter, create and convert the stratingscene.
m_converter = new BL_Converter(m_maggie, m_ketsjiEngine);
m_converter = new BL_Converter(m_maggie, m_ketsjiEngine, m_alwaysUseExpandFraming, m_camZoom);
m_ketsjiEngine->SetConverter(m_converter);

m_kxStartScene = m_ketsjiEngine->CreateScene(m_startScene);
Expand All @@ -296,8 +298,6 @@ void LA_Launcher::InitEngine()
AUD_Device_setDistanceModel(device, AUD_DistanceModel(m_startScene->audio.distance_model));
#endif // WITH_AUDASPACE

m_converter->SetAlwaysUseExpandFraming(GetUseAlwaysExpandFraming());

// Convert scene data.
m_ketsjiEngine->ConvertScene(m_kxStartScene);

Expand Down
6 changes: 4 additions & 2 deletions source/gameengine/Launcher/LA_Launcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ class LA_Launcher
PyObject *m_globalDict;
#endif // WITH_PYTHON

bool m_alwaysUseExpandFraming;
float m_camZoom;

/// The number of render samples.
int m_samples;

Expand Down Expand Up @@ -125,14 +128,13 @@ class LA_Launcher

virtual RAS_ICanvas *CreateCanvas(RAS_Rasterizer *rasty) = 0;
virtual RAS_Rasterizer::DrawType GetRasterizerDrawMode() = 0;
virtual bool GetUseAlwaysExpandFraming() = 0;
virtual void InitCamera() = 0;

virtual void SetWindowOrder(short order) = 0;

public:
LA_Launcher(GHOST_ISystem *system, Main *maggie, Scene *scene, GlobalSettings *gs,
RAS_Rasterizer::StereoMode stereoMode, int samples, int argc, char **argv);
RAS_Rasterizer::StereoMode stereoMode, int samples, bool alwaysUseExpandFraming, int argc, char **argv);
virtual ~LA_Launcher();

#ifdef WITH_PYTHON
Expand Down
7 changes: 1 addition & 6 deletions source/gameengine/Launcher/LA_PlayerLauncher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ extern "C" {

LA_PlayerLauncher::LA_PlayerLauncher(GHOST_ISystem *system, GHOST_IWindow *window, Main *maggie, Scene *scene, GlobalSettings *gs,
RAS_Rasterizer::StereoMode stereoMode, int samples, int argc, char **argv, const std::string& pythonMainLoop)
:LA_Launcher(system, maggie, scene, gs, stereoMode, samples, argc, argv),
:LA_Launcher(system, maggie, scene, gs, stereoMode, samples, false, argc, argv),
m_mainWindow(window),
m_pythonMainLoop(pythonMainLoop)
{
Expand Down Expand Up @@ -115,11 +115,6 @@ RAS_Rasterizer::DrawType LA_PlayerLauncher::GetRasterizerDrawMode()
return RAS_Rasterizer::RAS_TEXTURED;
}

bool LA_PlayerLauncher::GetUseAlwaysExpandFraming()
{
return false;
}

void LA_PlayerLauncher::InitCamera()
{
}
Expand Down
1 change: 0 additions & 1 deletion source/gameengine/Launcher/LA_PlayerLauncher.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ class LA_PlayerLauncher : public LA_Launcher

virtual RAS_ICanvas *CreateCanvas(RAS_Rasterizer *rasty);
virtual RAS_Rasterizer::DrawType GetRasterizerDrawMode();
virtual bool GetUseAlwaysExpandFraming();
virtual void InitCamera();

virtual void SetWindowOrder(short order);
Expand Down
Loading

0 comments on commit 3257be1

Please sign in to comment.