mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-04 20:57:49 +00:00
345 lines
13 KiB
C++
345 lines
13 KiB
C++
/**
|
|
* RenderSettingsItem.cpp
|
|
* Copyright (c) 2013 ROBLOX Corp. All Rights Reserved.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "RenderSettingsItem.h"
|
|
|
|
// Roblox Headers
|
|
#include "v8datamodel/DebugSettings.h"
|
|
#include "v8datamodel/GameBasicSettings.h"
|
|
#include "V8DataModel/PartInstance.h"
|
|
#include "util/standardout.h"
|
|
#include "rbx/SystemUtil.h"
|
|
|
|
using namespace RBX;
|
|
|
|
RBX_REGISTER_CLASS(CRenderSettingsItem);
|
|
|
|
RBX_REGISTER_ENUM(CRenderSettings::AASamples);
|
|
RBX_REGISTER_ENUM(CRenderSettings::GraphicsMode);
|
|
RBX_REGISTER_ENUM(CRenderSettings::FrameRateManagerMode);
|
|
RBX_REGISTER_ENUM(CRenderSettings::AntialiasingMode);
|
|
RBX_REGISTER_ENUM(CRenderSettings::QualityLevel);
|
|
RBX_REGISTER_ENUM(CRenderSettings::ResolutionPreset);
|
|
|
|
namespace RBX
|
|
{
|
|
namespace Reflection
|
|
{
|
|
template<> Reflection::EnumDesc<CRenderSettings::AASamples>::EnumDesc()
|
|
:RBX::Reflection::EnumDescriptor("AASamples")
|
|
{
|
|
addPair(CRenderSettings::NONE, "None");
|
|
addPair(CRenderSettings::AA4, "4");
|
|
addPair(CRenderSettings::AA8, "8");
|
|
}
|
|
|
|
template<> Reflection::EnumDesc<CRenderSettings::GraphicsMode>::EnumDesc()
|
|
:Reflection::EnumDescriptor("GraphicsMode")
|
|
{
|
|
addPair(CRenderSettings::AutoGraphicsMode,"Automatic");
|
|
addPair(CRenderSettings::Direct3D9,"Direct3D9");
|
|
addPair(CRenderSettings::Direct3D11,"Direct3D11");
|
|
addPair(CRenderSettings::OpenGL,"OpenGL");
|
|
addPair(CRenderSettings::NoGraphics,"NoGraphics");
|
|
}
|
|
|
|
template<> Reflection::EnumDesc<CRenderSettings::FrameRateManagerMode>::EnumDesc()
|
|
:Reflection::EnumDescriptor("FramerateManagerMode")
|
|
{
|
|
addPair(CRenderSettings::FrameRateManagerAuto,"Automatic");
|
|
addPair(CRenderSettings::FrameRateManagerOn,"On");
|
|
addPair(CRenderSettings::FrameRateManagerOff,"Off");
|
|
}
|
|
|
|
template<> Reflection::EnumDesc<CRenderSettings::AntialiasingMode>::EnumDesc()
|
|
:Reflection::EnumDescriptor("Antialiasing")
|
|
{
|
|
addPair(CRenderSettings::AntialiasingOn,"Automatic");
|
|
addPair(CRenderSettings::AntialiasingOn,"Off");
|
|
addPair(CRenderSettings::AntialiasingOn,"On");
|
|
}
|
|
|
|
template<> Reflection::EnumDesc<CRenderSettings::QualityLevel>::EnumDesc()
|
|
:Reflection::EnumDescriptor("QualityLevel")
|
|
{
|
|
addPair(CRenderSettings::QualityAuto, "Automatic");
|
|
|
|
RBXASSERT(CRenderSettings::QualityLevelMax < 100);
|
|
|
|
// Generating all of the names for quality levels inplace on one array
|
|
for (int i = 1; i < CRenderSettings::QualityLevelMax; i++)
|
|
{
|
|
std::string name = RBX::format("Level%.2d", i);
|
|
addPair((CRenderSettings::QualityLevel)i, name.c_str());
|
|
}
|
|
{
|
|
char name [] = "Level 00";
|
|
char* numberstart = &name[sizeof(name) - 3];
|
|
for (int i = 1; i < CRenderSettings::QualityLevelMax; i++)
|
|
{
|
|
snprintf(numberstart, 3, "%2u", i);
|
|
addLegacyName(name, (CRenderSettings::QualityLevel)i);
|
|
}
|
|
}
|
|
}
|
|
|
|
template<> Reflection::EnumDesc<CRenderSettings::ResolutionPreset>::EnumDesc()
|
|
:Reflection::EnumDescriptor("Resolution")
|
|
{
|
|
addPair(CRenderSettings::ResolutionAuto, "Automatic");
|
|
addPair(CRenderSettings::Resolution720x526, "720x526");
|
|
addPair(CRenderSettings::Resolution800x600, "800x600");
|
|
addPair(CRenderSettings::Resolution1024x600, "1024x600");
|
|
addLegacyName("1024x600 (wide)", CRenderSettings::Resolution1024x600);
|
|
addPair(CRenderSettings::Resolution1024x768, "1024x768");
|
|
addPair(CRenderSettings::Resolution1280x720, "1280x720");
|
|
addLegacyName("1280x720 (wide)", CRenderSettings::Resolution1280x720);
|
|
addPair(CRenderSettings::Resolution1280x768, "1280x768");
|
|
addLegacyName("1280x768 (wide)", CRenderSettings::Resolution1280x768);
|
|
addPair(CRenderSettings::Resolution1152x864, "1152x864");
|
|
addPair(CRenderSettings::Resolution1280x800, "1280x800");
|
|
addLegacyName("1280x800 (wide)", CRenderSettings::Resolution1280x800);
|
|
addPair(CRenderSettings::Resolution1360x768, "1360x768");
|
|
addLegacyName("1360x768 (wide)", CRenderSettings::Resolution1360x768);
|
|
addPair(CRenderSettings::Resolution1280x960, "1280x960");
|
|
addPair(CRenderSettings::Resolution1280x1024, "1280x1024");
|
|
addPair(CRenderSettings::Resolution1440x900, "1440x900");
|
|
addLegacyName("1440x900 (wide)", CRenderSettings::Resolution1440x900);
|
|
addPair(CRenderSettings::Resolution1600x900, "1600x900");
|
|
addLegacyName("1600x900 (wide)", CRenderSettings::Resolution1600x900);
|
|
addPair(CRenderSettings::Resolution1600x1024, "1600x1024");
|
|
addLegacyName("1600x1024 (wide)", CRenderSettings::Resolution1600x1024);
|
|
addPair(CRenderSettings::Resolution1600x1200, "1600x1200");
|
|
addPair(CRenderSettings::Resolution1680x1050, "1680x1050");
|
|
addLegacyName("1680x1050 (wide)", CRenderSettings::Resolution1680x1050);
|
|
addPair(CRenderSettings::Resolution1920x1080, "1920x1080");
|
|
addLegacyName("1920x1080 (wide)", CRenderSettings::Resolution1920x1080);
|
|
addPair(CRenderSettings::Resolution1920x1200, "1920x1200");
|
|
addLegacyName("1920x1200 (wide)", CRenderSettings::Resolution1920x1200);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
REFLECTION_BEGIN();
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::GraphicsMode> prop_graphicsMode("GraphicsMode", "General", &CRenderSettingsItem::getGraphicsMode, &CRenderSettingsItem::setGraphicsMode);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_exporterMergeByMaterial("ExportMergeByMaterial", "General", &CRenderSettingsItem::getObjExportMergeByMaterial, &CRenderSettingsItem::setObjExportMergeByMaterial);
|
|
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::FrameRateManagerMode> prop_frameRateManagerMode("FrameRateManager", "General", &CRenderSettingsItem::getFrameRateManagerMode, &CRenderSettingsItem::setFrameRateManagerMode);
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::QualityLevel> prop_frmQuality("QualityLevel", "Performance", &CRenderSettingsItem::getQualityLevel, &CRenderSettingsItem::setQualityLevel);
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::QualityLevel> prop_frmEditQuality("EditQualityLevel", "Performance", &CRenderSettingsItem::getEditQualityLevel, &CRenderSettingsItem::setEditQualityLevel);
|
|
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_ShowAggregation("IsAggregationShown", "Debug", &CRenderSettingsItem::getShowAggregation, &CRenderSettingsItem::setShowAggregation);
|
|
|
|
static Reflection::BoundProp<bool> prop_IsSynchronizedWithPhysics("IsSynchronizedWithPhysics", "Performance", &CRenderSettingsItem::isSynchronizedWithPhysics);
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::AASamples> prop_AASamples("AASamples", "Quality", &CRenderSettingsItem::getAASamples, &CRenderSettingsItem::setAASamples);
|
|
Reflection::BoundProp<std::string> CRenderSettingsItem::prop_profileName("profileName", "Quality", &CRenderSettingsItem::profileName, Reflection::PropertyDescriptor::STREAMING);
|
|
static Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::AntialiasingMode> prop_antialiasingMode("Antialiasing", "Quality", &CRenderSettingsItem::getAntialiasingMode, &CRenderSettingsItem::setAntialiasingMode);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_debugShowBoundingBoxes("ShowBoundingBoxes", "Debug", &CRenderSettingsItem::getDebugShowBoundingBoxes, &CRenderSettingsItem::setDebugShowBoundingBoxes);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, int> prop_autoQualityLevel("AutoFRMLevel", "Debug", &CRenderSettingsItem::getAutoQualityLevel, &CRenderSettingsItem::setAutoQualityLevel);
|
|
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_enableFRM("EnableFRM", "Debug", &CRenderSettingsItem::getEnableFRM, &CRenderSettingsItem::setEnableFRM, Reflection::PropertyDescriptor::LEGACY_SCRIPTING);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_debugDisableInterpolation("DebugDisableInterpolation", "Debug", &CRenderSettingsItem::getDebugDisableInterpolation, &CRenderSettingsItem::setDebugDisableInterpolation);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_showInterpolationPath("ShowInterpolationpath", "Debug", &CRenderSettingsItem::getShowInterpolationPath, &CRenderSettingsItem::setShowInterpolationPath);
|
|
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, bool> prop_debugReloadAssets("ReloadAssets", "Debug", &CRenderSettingsItem::getDebugReloadAssets, &CRenderSettingsItem::setDebugReloadAssets);
|
|
|
|
Reflection::EnumPropDescriptor<CRenderSettingsItem, CRenderSettingsItem::ResolutionPreset> CRenderSettingsItem::prop_resolution("Resolution", "Screen", &CRenderSettingsItem::getResolutionPreference, &CRenderSettingsItem::setResolutionPreference);
|
|
|
|
static Reflection::BoundFuncDesc<CRenderSettingsItem, int()> func_getMaxQualityLevel(&CRenderSettingsItem::getMaxQualityLevel, "GetMaxQualityLevel", Security::None);
|
|
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, int> prop_textureCacheSize("TextureCacheSize", "Cache", &CRenderSettingsItem::getTextureCacheSize, &CRenderSettingsItem::setTextureCacheSize);
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, int> prop_meshCacheSize("MeshCacheSize", "Cache", &CRenderSettingsItem::getMeshCacheSize, &CRenderSettingsItem::setMeshCacheSize);
|
|
REFLECTION_END();
|
|
|
|
const char* const sRenderSettings = "RenderSettings";
|
|
|
|
CRenderSettingsItem::CRenderSettingsItem()
|
|
:isSynchronizedWithPhysics(false)
|
|
, currentDisplaySize(800, 600)
|
|
{
|
|
setName("Rendering");
|
|
fullScreenSizes.push_back(currentDisplaySize); // at least one valid default.
|
|
|
|
size_t s = SystemUtil::getVideoMemory();
|
|
if (s>=16000000)
|
|
fullscreenSize = G3D::Vector2int16(1024, 768);
|
|
else
|
|
fullscreenSize = G3D::Vector2int16(800, 600);
|
|
}
|
|
|
|
|
|
void CRenderSettingsItem::setShowAggregation(bool value) {
|
|
if (value!=showAggregation)
|
|
{
|
|
showAggregation = value;
|
|
settingsChangedSignal(&prop_ShowAggregation);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::runProfiler(bool overwriteExistingValues)
|
|
{
|
|
static const char* profileName = "profiled5";
|
|
if (overwriteExistingValues || this->profileName!=profileName)
|
|
{
|
|
prop_profileName.setValue(this, profileName);
|
|
}
|
|
}
|
|
|
|
|
|
void CRenderSettingsItem::setAASamples(AASamples value)
|
|
{
|
|
if (value!=aaSamples)
|
|
{
|
|
aaSamples = value;
|
|
settingsChangedSignal(&prop_AASamples);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::setResolutionPreference(ResolutionPreset value)
|
|
{
|
|
if (value!=resolutionPreference)
|
|
{
|
|
resolutionPreference = value;
|
|
settingsChangedSignal(&prop_resolution);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::setFullscreenSize(G3D::Vector2int16 value)
|
|
{
|
|
fullscreenSize = value;
|
|
}
|
|
|
|
void CRenderSettingsItem::setWindowSize(G3D::Vector2int16 value)
|
|
{
|
|
windowSize = value;
|
|
}
|
|
|
|
// Same pattern used in PhysicsSettings::30FPS Throttle
|
|
void CRenderSettingsItem::setGraphicsMode(GraphicsMode value)
|
|
{
|
|
if (value != graphicsMode) {
|
|
graphicsMode = value;
|
|
settingsChangedSignal(&prop_graphicsMode);
|
|
}
|
|
}
|
|
|
|
#define SET_MODE(modeName, modeVar) \
|
|
void CRenderSettingsItem::set##modeName##Mode(modeName##Mode value) \
|
|
{\
|
|
if (value != modeVar##Mode) {\
|
|
modeVar##Mode = value;\
|
|
settingsChangedSignal(&prop_##modeVar##Mode);\
|
|
}\
|
|
}
|
|
|
|
SET_MODE(FrameRateManager,frameRateManager);
|
|
SET_MODE(Antialiasing,antialiasing);
|
|
|
|
|
|
void CRenderSettingsItem::setQualityLevel(QualityLevel value)
|
|
{
|
|
if (value != qualityLevel) {
|
|
qualityLevel = value;
|
|
settingsChangedSignal(&prop_frmQuality);
|
|
}
|
|
}
|
|
void CRenderSettingsItem::setEditQualityLevel(QualityLevel value)
|
|
{
|
|
if (value != editQualityLevel) {
|
|
editQualityLevel = value;
|
|
settingsChangedSignal(&prop_frmEditQuality);
|
|
}
|
|
}
|
|
void CRenderSettingsItem::setAutoQualityLevel(int value)
|
|
{
|
|
if (value != autoQualityLevel) {
|
|
autoQualityLevel = value;
|
|
settingsChangedSignal(&prop_frmQuality);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::setDebugShowBoundingBoxes(bool value)
|
|
{
|
|
if (value != debugShowBoundingBoxes) {
|
|
debugShowBoundingBoxes = value;
|
|
settingsChangedSignal(&prop_debugShowBoundingBoxes);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::setEnableFRM(bool value)
|
|
{
|
|
if (value != enableFRM) {
|
|
enableFRM = value;
|
|
settingsChangedSignal(&prop_enableFRM);
|
|
}
|
|
}
|
|
|
|
void CRenderSettingsItem::setTextureCacheSize(unsigned int size)
|
|
{
|
|
textureCacheSize = size;
|
|
}
|
|
void CRenderSettingsItem::setMeshCacheSize(unsigned int size)
|
|
{
|
|
meshCacheSize = size;
|
|
}
|
|
|
|
bool CRenderSettingsItem::getDebugDisableInterpolation() const
|
|
{
|
|
return PartInstance::disableInterpolation;
|
|
}
|
|
|
|
void CRenderSettingsItem::setDebugDisableInterpolation(bool value)
|
|
{
|
|
PartInstance::disableInterpolation = value;
|
|
}
|
|
|
|
bool CRenderSettingsItem::getShowInterpolationPath() const
|
|
{
|
|
return PartInstance::showInterpolationPath;
|
|
}
|
|
|
|
void CRenderSettingsItem::setShowInterpolationPath(bool value)
|
|
{
|
|
PartInstance::showInterpolationPath = value;
|
|
}
|
|
|
|
bool CRenderSettingsItem::getDebugReloadAssets() const
|
|
{
|
|
return debugReloadAssets;
|
|
}
|
|
|
|
void CRenderSettingsItem::setDebugReloadAssets(bool value)
|
|
{
|
|
debugReloadAssets = value;
|
|
}
|
|
|
|
bool CRenderSettingsItem::getObjExportMergeByMaterial() const
|
|
{
|
|
return objExportMergeByMaterial;
|
|
}
|
|
|
|
void CRenderSettingsItem::setObjExportMergeByMaterial(bool value)
|
|
{
|
|
objExportMergeByMaterial = value;
|
|
}
|
|
|
|
#define SET_VAR_NOREG(T, boolName, boolVar, Category) \
|
|
void CRenderSettingsItem::set##boolName(T value) \
|
|
{ \
|
|
if (value != boolVar) { \
|
|
boolVar = value; \
|
|
settingsChangedSignal(&prop_##boolVar); \
|
|
} \
|
|
}
|
|
|
|
#define SET_VAR(T, boolName, boolVar, Category) \
|
|
static Reflection::PropDescriptor<CRenderSettingsItem, T> prop_##boolVar(#boolName, Category, &CRenderSettingsItem::get##boolName, &CRenderSettingsItem::set##boolName); \
|
|
SET_VAR_NOREG(T, boolName, boolVar, Category)
|
|
|
|
SET_VAR(bool, EagerBulkExecution, eagerBulkExecution, "Performance")
|
|
|