Automated merge with https://bitbucket.org/lindenlab/viewer-lion
commit
02423199e8
|
|
@ -36,6 +36,8 @@
|
|||
|
||||
|
||||
extern U32 gOctreeMaxCapacity;
|
||||
extern float gOctreeMinSize;
|
||||
|
||||
/*#define LL_OCTREE_PARANOIA_CHECK 0
|
||||
#if LL_DARWIN
|
||||
#define LL_OCTREE_MAX_CAPACITY 32
|
||||
|
|
@ -106,6 +108,7 @@ public:
|
|||
: mParent((oct_node*)parent),
|
||||
mOctant(octant)
|
||||
{
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds
|
||||
mData.push_back(NULL);
|
||||
mDataEnd = &mData[0];
|
||||
|
|
@ -213,7 +216,7 @@ public:
|
|||
F32 size = mSize[0];
|
||||
F32 p_size = size * 2.f;
|
||||
|
||||
return (radius <= 0.001f && size <= 0.001f) ||
|
||||
return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||
|
||||
(radius <= p_size && radius > size);
|
||||
}
|
||||
|
||||
|
|
@ -319,7 +322,7 @@ public:
|
|||
//is it here?
|
||||
if (isInside(data->getPositionGroup()))
|
||||
{
|
||||
if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) ||
|
||||
if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||
|
||||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
|
||||
{ //it belongs here
|
||||
mData.push_back(NULL);
|
||||
|
|
@ -356,8 +359,9 @@ public:
|
|||
LLVector4a val;
|
||||
val.setSub(center, getCenter());
|
||||
val.setAbs(val);
|
||||
|
||||
S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7;
|
||||
LLVector4a min_diff(gOctreeMinSize);
|
||||
|
||||
S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;
|
||||
|
||||
if( lt == 0x7 )
|
||||
{
|
||||
|
|
@ -389,6 +393,7 @@ public:
|
|||
}
|
||||
#endif
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//make the new kid
|
||||
child = new LLOctreeNode<T>(center, size, this);
|
||||
addChild(child);
|
||||
|
|
@ -796,6 +801,8 @@ public:
|
|||
this->setSize(size2);
|
||||
this->updateMinMax();
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize);
|
||||
|
||||
//copy our children to a new branch
|
||||
LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);
|
||||
|
||||
|
|
|
|||
|
|
@ -85,6 +85,18 @@ void show_window_creation_error(const std::string& title)
|
|||
LL_WARNS("Window") << title << LL_ENDL;
|
||||
}
|
||||
|
||||
HGLRC SafeCreateContext(HDC hdc)
|
||||
{
|
||||
__try
|
||||
{
|
||||
return wglCreateContext(hdc);
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
BOOL LLWindowWin32::sIsClassRegistered = FALSE;
|
||||
|
||||
|
|
@ -1166,14 +1178,15 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (!(mhRC = wglCreateContext(mhDC)))
|
||||
|
||||
if (!(mhRC = SafeCreateContext(mhDC)))
|
||||
{
|
||||
close();
|
||||
OSMessageBox(mCallbacks->translateString("MBGLContextErr"),
|
||||
mCallbacks->translateString("MBError"), OSMB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (!wglMakeCurrent(mhDC, mhRC))
|
||||
{
|
||||
close();
|
||||
|
|
|
|||
|
|
@ -7982,6 +7982,18 @@
|
|||
<integer>128</integer>
|
||||
</map>
|
||||
|
||||
<key>OctreeMinimumNodeSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Minimum size of any octree node</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.01</real>
|
||||
</map>
|
||||
|
||||
<key>OctreeStaticObjectSizeFactor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -87,15 +87,30 @@ void LLFloaterHardwareSettings::refresh()
|
|||
refreshEnabledState();
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::onSetVRAM()
|
||||
{
|
||||
S32 vram = childGetValue("GraphicsCardTextureMemory").asInteger();
|
||||
|
||||
//give the texture system plenty of leeway to avoid swapping
|
||||
vram /= 3;
|
||||
|
||||
gSavedSettings.setS32("TextureMemory", vram);
|
||||
}
|
||||
|
||||
void LLFloaterHardwareSettings::refreshEnabledState()
|
||||
{
|
||||
F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");
|
||||
|
||||
S32 min_tex_mem = LLViewerTextureList::getMinVideoRamSetting();
|
||||
S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(false, mem_multiplier);
|
||||
S32 max_tex_mem = LLViewerTextureList::getMaxVideoRamSetting(true, mem_multiplier);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMinValue(min_tex_mem);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setMaxValue(max_tex_mem);
|
||||
|
||||
S32 vram = gSavedSettings.getS32("TextureMemory");
|
||||
vram = vram*3;
|
||||
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setValue(vram);
|
||||
getChild<LLSliderCtrl>("GraphicsCardTextureMemory")->setCommitCallback(boost::bind(&LLFloaterHardwareSettings::onSetVRAM, this));
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
|
||||
!gGLManager.mHasVertexBufferObject)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ public:
|
|||
/// don't apply the changed values
|
||||
void cancel();
|
||||
|
||||
void onSetVRAM();
|
||||
|
||||
/// refresh the enabled values
|
||||
void refreshEnabledState();
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ U32 LLSpatialGroup::sNodeCount = 0;
|
|||
std::set<GLuint> LLSpatialGroup::sPendingQueries;
|
||||
|
||||
U32 gOctreeMaxCapacity;
|
||||
F32 gOctreeMinSize;
|
||||
|
||||
BOOL LLSpatialGroup::sNoDelete = FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -368,6 +368,7 @@ static bool handleRepartition(const LLSD&)
|
|||
if (gPipeline.isInit())
|
||||
{
|
||||
gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
|
||||
gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
|
||||
gObjectList.repartitionObjects();
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
#include <list>
|
||||
|
||||
#define MIN_VIDEO_RAM_IN_MEGA_BYTES 32
|
||||
#define MAX_VIDEO_RAM_IN_MEGA_BYTES 512 // 512MB max for performance reasons.
|
||||
#define MAX_VIDEO_RAM_IN_MEGA_BYTES 4096
|
||||
|
||||
class LLImageGL ;
|
||||
class LLImageRaw;
|
||||
|
|
|
|||
|
|
@ -1270,7 +1270,7 @@ S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_m
|
|||
// - it's going to be swapping constantly regardless
|
||||
S32 max_vram = gGLManager.mVRAM;
|
||||
|
||||
if(gGLManager.mIsATI)
|
||||
if(!get_recommended && gGLManager.mIsATI)
|
||||
{
|
||||
//shrink the availabe vram for ATI cards because some of them do not handel texture swapping well.
|
||||
max_vram = (S32)(max_vram * 0.75f);
|
||||
|
|
@ -1285,15 +1285,15 @@ S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_m
|
|||
{
|
||||
if (!get_recommended)
|
||||
{
|
||||
max_texmem = 512;
|
||||
max_texmem = 2048;
|
||||
}
|
||||
else if (gSavedSettings.getBOOL("NoHardwareProbe")) //did not do hardware detection at startup
|
||||
{
|
||||
max_texmem = 512;
|
||||
max_texmem = 2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
max_texmem = 128;
|
||||
max_texmem = 512;
|
||||
}
|
||||
|
||||
llwarns << "VRAM amount not detected, defaulting to " << max_texmem << " MB" << llendl;
|
||||
|
|
@ -1301,10 +1301,7 @@ S32 LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, float mem_m
|
|||
|
||||
S32 system_ram = (S32)BYTES_TO_MEGA_BYTES(gSysMemory.getPhysicalMemoryClamped()); // In MB
|
||||
//llinfos << "*** DETECTED " << system_ram << " MB of system memory." << llendl;
|
||||
if (get_recommended)
|
||||
max_texmem = llmin(max_texmem, (S32)(system_ram/2));
|
||||
else
|
||||
max_texmem = llmin(max_texmem, (S32)(system_ram));
|
||||
max_texmem = llmin(max_texmem, (S32)(system_ram));
|
||||
|
||||
// limit the texture memory to a multiple of the default if we've found some cards to behave poorly otherwise
|
||||
max_texmem = llmin(max_texmem, (S32) (mem_multiplier * (F32) max_texmem));
|
||||
|
|
@ -1334,7 +1331,7 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32 mem)
|
|||
mem = llclamp(mem, getMinVideoRamSetting(), getMaxVideoRamSetting(false, mem_multiplier));
|
||||
if (mem != cur_mem)
|
||||
{
|
||||
gSavedSettings.setS32("TextureMemory", mem);
|
||||
gSavedSettings.setS32("TextureMemory", mem/3);
|
||||
return; //listener will re-enter this function
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -498,6 +498,7 @@ void LLPipeline::init()
|
|||
refreshCachedSettings();
|
||||
|
||||
gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
|
||||
gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
|
||||
sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");
|
||||
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
|
||||
sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
|
||||
|
|
|
|||
|
|
@ -155,13 +155,12 @@
|
|||
tool_tip="Compresses textures in video memory, allowing for higher resolution textures to be loaded at the cost of some color quality."
|
||||
width="315" />
|
||||
<slider
|
||||
control_name="TextureMemory"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
increment="16"
|
||||
initial_value="32"
|
||||
label="Texture Memory (MB):"
|
||||
label="Video Memory (MB):"
|
||||
label_width="195"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
|
|
|
|||
Loading…
Reference in New Issue