Enabled post-processing features. Todo: Fix bloom

Fixed avatar shadows on AMD (and any other sane GLSL compiler)
Fixed windows compile:
 -curl version was updated after running develop.py. Not sure if applicable to linux/darwin
 -new llqtwebkit version on windows, since the old url is now invalid.
This commit is contained in:
Shyotl
2011-02-09 19:21:31 -06:00
parent 1919c00f2d
commit a44d633bc8
11 changed files with 166 additions and 163 deletions

View File

@@ -42,6 +42,7 @@
#include "apr_poll.h"
#include "llapr.h"
#define CARES_STATICLIB
#include "llares.h"
#if defined(LL_WINDOWS)
@@ -104,7 +105,8 @@ void LLAres::QueryResponder::queryError(int code)
LLAres::LLAres() :
chan_(NULL), mInitSuccess(false)
{
if (ares_init(&chan_) != ARES_SUCCESS)
if (ares_library_init(ARES_LIB_INIT_ALL) != ARES_SUCCESS ||
ares_init(&chan_) != ARES_SUCCESS)
{
llwarns << "Could not succesfully initialize ares!" << llendl;
return;
@@ -468,7 +470,7 @@ bool LLAres::process(U64 timeout)
ll_init_apr();
}
int socks[ARES_GETSOCK_MAXNUM];
ares_socket_t socks[ARES_GETSOCK_MAXNUM];
apr_pollfd_t aprFds[ARES_GETSOCK_MAXNUM];
apr_int32_t nsds = 0;
int nactive = 0;

View File

@@ -37,6 +37,9 @@
#include "llsdserialize.h"
#include "llrender.h"
#include "lldir.h"
extern LLGLSLShader gPostColorFilterProgram;
extern LLGLSLShader gPostNightVisionProgram;
LLPostProcess * gPostProcess = NULL;
@@ -60,7 +63,7 @@ LLPostProcess::LLPostProcess(void) :
mNoiseTexture = NULL ;
mTempBloomTexture = NULL ;
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.*/
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME));
LL_DEBUGS2("AppInit", "Shaders") << "Loading PostProcess Effects settings from " << pathName << LL_ENDL;
@@ -108,7 +111,7 @@ LLPostProcess::LLPostProcess(void) :
}
setSelectedEffect("default");
*/
//*/
}
LLPostProcess::~LLPostProcess(void)
@@ -145,7 +148,7 @@ void LLPostProcess::setSelectedEffect(std::string const & effectName)
void LLPostProcess::saveEffect(std::string const & effectName)
{
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.*/
mAllEffects[effectName] = tweaks;
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME));
@@ -156,7 +159,7 @@ void LLPostProcess::saveEffect(std::string const & effectName)
LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
formatter->format(mAllEffects, effectsXML);
*/
//*/
}
void LLPostProcess::invalidate()
{
@@ -228,13 +231,13 @@ void LLPostProcess::applyShaders(void)
void LLPostProcess::applyColorFilterShader(void)
{
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.*/
gPostColorFilterProgram.bind();
gGL.getTexUnit(0)->activate();
gGL.getTexUnit(0)->enable(LLTexUnit::TT_RECT_TEXTURE);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_RECT_TEXTURE, sceneRenderTexture);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_RECT_TEXTURE, mSceneRenderTexture.get()->getTexName());
getShaderUniforms(colorFilterUniforms, gPostColorFilterProgram.mProgramObject);
glUniform1iARB(colorFilterUniforms["RenderTexture"], 0);
@@ -256,7 +259,7 @@ void LLPostProcess::applyColorFilterShader(void)
/// Draw a screen space quad
drawOrthoQuad(screenW, screenH, QUAD_NORMAL);
gPostColorFilterProgram.unbind();
*/
//*/
}
void LLPostProcess::createColorFilterShader(void)
@@ -272,20 +275,20 @@ void LLPostProcess::createColorFilterShader(void)
void LLPostProcess::applyNightVisionShader(void)
{
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.
/* Do nothing. Needs to be updated to use our current shader system, and to work with the move into llrender.*/
gPostNightVisionProgram.bind();
gGL.getTexUnit(0)->activate();
gGL.getTexUnit(0)->enable(LLTexUnit::TT_RECT_TEXTURE);
getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_RECT_TEXTURE, sceneRenderTexture);
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_RECT_TEXTURE, mSceneRenderTexture.get()->getTexName());
glUniform1iARB(nightVisionUniforms["RenderTexture"], 0);
gGL.getTexUnit(1)->activate();
gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->bindManual(LLTexUnit::TT_TEXTURE, noiseTexture);
gGL.getTexUnit(1)->bindManual(LLTexUnit::TT_TEXTURE, mNoiseTexture.get()->getTexName());
glUniform1iARB(nightVisionUniforms["NoiseTexture"], 1);
@@ -305,7 +308,7 @@ void LLPostProcess::applyNightVisionShader(void)
drawOrthoQuad(screenW, screenH, QUAD_NOISE);
gPostNightVisionProgram.unbind();
gGL.getTexUnit(0)->activate();
*/
//*/
}
void LLPostProcess::createNightVisionShader(void)
@@ -392,79 +395,79 @@ void LLPostProcess::copyFrameBuffer(U32 & texture, unsigned int width, unsigned
glCopyTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, 0, 0, width, height, 0);
}
inline void InitQuadArray(F32 *arr, const F32 x, const F32 y, const F32 width, const F32 height)
{
//Lower left
*(arr++)=x;
*(arr++)=y;
//Upper left
*(arr++)=x;
*(arr++)=y+height;
//Upper right
*(arr++)=x+width;
*(arr++)=y+height;
//Lower right
*(arr++)=x+width;
*(arr++)=y;
}
void LLPostProcess::drawOrthoQuad(unsigned int width, unsigned int height, QuadType type)
{
#if 0
float noiseX = 0.f;
float noiseY = 0.f;
float screenRatio = 1.0f;
#if 1
//Redid the logic here. Less cases. No longer using immediate mode.
bool second_tex = true;
//Vertex array used for all post-processing effects
static F32 verts[8];
//Texture coord array used for all post-processing effects
static F32 tex0[8];
//Texture coord array used for relevant post processing effects
static F32 tex1[8];
if (type == QUAD_NOISE){
noiseX = ((float) rand() / (float) RAND_MAX);
noiseY = ((float) rand() / (float) RAND_MAX);
screenRatio = (float) width / (float) height;
//Set up vertex array
InitQuadArray(verts, 0.f, 0.f, width, height);
//Set up first texture coords
if(type == QUAD_BLOOM_EXTRACT)
{
InitQuadArray(tex0, 0.f, 0.f, width*2.f, height*2.f);
second_tex = false;
}
else
{
InitQuadArray(tex0, 0.f, 0.f, width, height);
//Set up second texture coords
if( type == QUAD_BLOOM_COMBINE)
InitQuadArray(tex1, 0.f, 0.f, width*.5, height*.5);
else if( type == QUAD_NOISE )
InitQuadArray(tex1, ((float) rand() / (float) RAND_MAX), ((float) rand() / (float) RAND_MAX),
width * noiseTextureScale / height, noiseTextureScale);
else
second_tex = false;
}
//Prepare to render
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer(2, GL_FLOAT, sizeof(F32)*2, verts);
if(second_tex) //tex1 setup
{
glClientActiveTextureARB(GL_TEXTURE1);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer(2, GL_FLOAT, sizeof(F32)*2, tex1);
}
glClientActiveTextureARB(GL_TEXTURE0);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer(2, GL_FLOAT, sizeof(F32)*2, tex0);
glBegin(GL_QUADS);
if (type != QUAD_BLOOM_EXTRACT){
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.f, (GLfloat) height);
} else {
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.f, (GLfloat) height * 2.0f);
}
if (type == QUAD_NOISE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
noiseX,
noiseTextureScale + noiseY);
} else if (type == QUAD_BLOOM_COMBINE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.f, (GLfloat) height * 0.5f);
}
glVertex2f(0.f, (GLfloat) screenH - height);
//Render
glDrawArrays(GL_QUADS, 0, sizeof(verts)/sizeof(verts[0]));
if (type != QUAD_BLOOM_EXTRACT){
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.f, 0.f);
} else {
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.f, 0.f);
}
if (type == QUAD_NOISE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
noiseX,
noiseY);
} else if (type == QUAD_BLOOM_COMBINE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.f, 0.f);
}
glVertex2f(0.f, (GLfloat) height + (screenH - height));
if (type != QUAD_BLOOM_EXTRACT){
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (GLfloat) width, 0.f);
} else {
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (GLfloat) width * 2.0f, 0.f);
}
if (type == QUAD_NOISE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
screenRatio * noiseTextureScale + noiseX,
noiseY);
} else if (type == QUAD_BLOOM_COMBINE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, (GLfloat) width * 0.5f, 0.f);
}
glVertex2f((GLfloat) width, (GLfloat) height + (screenH - height));
if (type != QUAD_BLOOM_EXTRACT){
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (GLfloat) width, (GLfloat) height);
} else {
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, (GLfloat) width * 2.0f, (GLfloat) height * 2.0f);
}
if (type == QUAD_NOISE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,
screenRatio * noiseTextureScale + noiseX,
noiseTextureScale + noiseY);
} else if (type == QUAD_BLOOM_COMBINE){
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, (GLfloat) width * 0.5f, (GLfloat) height * 0.5f);
}
glVertex2f((GLfloat) width, (GLfloat) screenH - height);
glEnd();
//Cleanup
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY ); //for tex0
if(second_tex)
{
glClientActiveTextureARB(GL_TEXTURE1);
glDisableClientState( GL_TEXTURE_COORD_ARRAY ); //for tex1
}
#endif
}
@@ -473,7 +476,7 @@ void LLPostProcess::viewOrthogonal(unsigned int width, unsigned int height)
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho( 0.f, (GLdouble) width , (GLdouble) height , 0.f, -1.f, 1.f );
glOrtho( 0.f, (GLdouble) width, 0.f, (GLdouble) height, -1.f, 1.f );
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

View File

@@ -10,6 +10,7 @@ uniform sampler2D diffuseMap;
void main()
{
gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy));
//gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy)); //This should not compile!
gl_FragColor = vec4(1,1,1,texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a);
}

View File

@@ -8,24 +8,20 @@
uniform sampler2D diffuseMap;
uniform float glowStrength;
float kern[4] = float[4](.25,.5,.8,1.0); //Initialize the correct (non nVidia cg) way
void main()
{
vec4 col = vec4(0.0, 0.0, 0.0, 0.0);
// ATI compiler falls down on array initialization.
float kern[8];
kern[0] = 0.25; kern[1] = 0.5; kern[2] = 0.8; kern[3] = 1.0;
kern[4] = 1.0; kern[5] = 0.8; kern[6] = 0.5; kern[7] = 0.25;
col += kern[0] * texture2D(diffuseMap, gl_TexCoord[0].xy);
col += kern[1] * texture2D(diffuseMap, gl_TexCoord[1].xy);
col += kern[2] * texture2D(diffuseMap, gl_TexCoord[2].xy);
col += kern[3] * texture2D(diffuseMap, gl_TexCoord[3].xy);
col += kern[4] * texture2D(diffuseMap, gl_TexCoord[0].zw);
col += kern[5] * texture2D(diffuseMap, gl_TexCoord[1].zw);
col += kern[6] * texture2D(diffuseMap, gl_TexCoord[2].zw);
col += kern[7] * texture2D(diffuseMap, gl_TexCoord[3].zw);
col += kern[3] * texture2D(diffuseMap, gl_TexCoord[0].zw);
col += kern[2] * texture2D(diffuseMap, gl_TexCoord[1].zw);
col += kern[1] * texture2D(diffuseMap, gl_TexCoord[2].zw);
col += kern[0] * texture2D(diffuseMap, gl_TexCoord[3].zw);
gl_FragColor = vec4(col.rgb * glowStrength, col.a);
}

View File

@@ -914,12 +914,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.mScreen.flush();
}
}
/// We copy the frame buffer straight into a texture here,
/// and then display it again with compositor effects.
/// Using render to texture would be faster/better, but I don't have a
/// grasp of their full display stack just yet.
// gPostProcess->apply(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
{
@@ -933,7 +927,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
{
gFrameStats.start(LLFrameStats::RENDER_UI);
render_ui();
}
}
LLSpatialGroup::sNoDelete = FALSE;
}
@@ -1131,8 +1125,14 @@ void render_ui(F32 zoom_factor, int subfield)
if (to_texture)
{
gPipeline.renderBloom(gSnapshot, zoom_factor, subfield);
gPipeline.mScreen.flush(); //blit, etc.
}
/// We copy the frame buffer straight into a texture here,
/// and then display it again with compositor effects.
/// Using render to texture would be faster/better, but I don't have a
/// grasp of their full display stack just yet.
gPostProcess->apply(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
render_hud_elements();
render_hud_attachments();
}

View File

@@ -754,7 +754,7 @@ BOOL LLViewerShaderMgr::loadShadersEffects()
}
}
#if 0
#if 1
// disabling loading of postprocess shaders until we fix
// ATI sampler2DRect compatibility.

View File

@@ -8,157 +8,157 @@
width="400">
<panel border="true" bottom="-400" follows="left|top|right|bottom" height="400"
label="Color Filter" left="1" mouse_opaque="false"
name="wmiColorFilterPanel" width="398">
<check_box bottom="-20" control_name="wmiColorFilterToggle" follows="left|top"
name="ColorFilterPanel" width="398">
<check_box bottom="-20" control_name="ColorFilterToggle" follows="left|top"
font="SansSerifSmall" height="16" initial_value="false" label="Enable"
left="14" mouse_opaque="true" name="wmiColorFilterToggle" width="200" />
left="14" mouse_opaque="true" name="ColorFilterToggle" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiColorFilterBrightnessText" v_pad="0"
left="10" mouse_opaque="true" name="ColorFilterBrightnessText" v_pad="0"
width="355">
Brightness
</text>
<slider bottom_delta="-30" can_edit_text="false"
control_name="wmiColorFilterBrightness" decimal_digits="2" follows="left"
control_name="ColorFilterBrightness" decimal_digits="2" follows="left"
height="10" increment="0.01" initial_val="1.0" label="" left="14"
max_val="4" min_val="0" mouse_opaque="true" name="wmiColorFilterBrightness"
max_val="4" min_val="0" mouse_opaque="true" name="ColorFilterBrightness"
show_text="true" value="1.0" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiColorFilterSaturationText" v_pad="0"
left="10" mouse_opaque="true" name="ColorFilterSaturationText" v_pad="0"
width="355">
Saturation
</text>
<slider bottom_delta="-30" can_edit_text="false"
control_name="wmiColorFilterSaturation" decimal_digits="2" follows="left"
control_name="ColorFilterSaturation" decimal_digits="2" follows="left"
height="10" increment="0.01" initial_val="1.0" label="" left="14"
max_val="2" min_val="-1" mouse_opaque="true"
name="wmiColorFilterSaturation" show_text="true" value="1.0" width="200" />
name="ColorFilterSaturation" show_text="true" value="1.0" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiColorFilterContrastText" v_pad="0"
left="10" mouse_opaque="true" name="ColorFilterContrastText" v_pad="0"
width="355">
Contrast
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiColorFilterContrast"
<slider bottom_delta="-30" can_edit_text="false" control_name="ColorFilterContrast"
decimal_digits="2" follows="left" height="10" increment="0.01"
initial_val="1.0" label="" left="14" max_val="4" min_val="0"
mouse_opaque="true" name="wmiColorFilterContrast" show_text="true"
mouse_opaque="true" name="ColorFilterContrast" show_text="true"
value="1.0" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiColorFilterBaseText" v_pad="0"
left="10" mouse_opaque="true" name="ColorFilterBaseText" v_pad="0"
width="355">
Contrast Base Color
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiColorFilterBaseR"
<slider bottom_delta="-30" can_edit_text="false" control_name="ColorFilterBaseR"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="1.0" label="R" left="14" max_val="1" min_val="0"
mouse_opaque="true" name="wmiColorFilterBaseR" show_text="true" value="1.0"
mouse_opaque="true" name="ColorFilterBaseR" show_text="true" value="1.0"
width="200" />
<slider bottom_delta="-20" can_edit_text="false" control_name="wmiColorFilterBaseG"
<slider bottom_delta="-20" can_edit_text="false" control_name="ColorFilterBaseG"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="1.0" label="G" left="14" max_val="1" min_val="0"
mouse_opaque="true" name="wmiColorFilterBaseG" show_text="true" value="1.0"
mouse_opaque="true" name="ColorFilterBaseG" show_text="true" value="1.0"
width="200" />
<slider bottom_delta="-20" can_edit_text="false" control_name="wmiColorFilterBaseB"
<slider bottom_delta="-20" can_edit_text="false" control_name="ColorFilterBaseB"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="1.0" label="B" left="14" max_val="1" min_val="0"
mouse_opaque="true" name="wmiColorFilterBaseB" show_text="true" value="1.0"
mouse_opaque="true" name="ColorFilterBaseB" show_text="true" value="1.0"
width="200" />
<slider bottom_delta="-20" can_edit_text="false" control_name="wmiColorFilterBaseI"
<slider bottom_delta="-20" can_edit_text="false" control_name="ColorFilterBaseI"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="0.5" label="I" left="14" max_val="1" min_val="0"
mouse_opaque="true" name="wmiColorFilterBaseI" show_text="true" value="1.0"
mouse_opaque="true" name="ColorFilterBaseI" show_text="true" value="1.0"
width="200" />
</panel>
<panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"
label="Night Vision" left="1" mouse_opaque="false"
name="wmiNightVisionPanel" width="398">
<check_box bottom="-20" control_name="wmiNightVisionToggle" follows="left|top"
name="NightVisionPanel" width="398">
<check_box bottom="-20" control_name="NightVisionToggle" follows="left|top"
font="SansSerifSmall" height="16" initial_value="false" label="Enable"
left="14" mouse_opaque="true" name="wmiNightVisionToggle" width="200" />
left="14" mouse_opaque="true" name="NightVisionToggle" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiNightVisionBrightMultText" v_pad="0"
left="10" mouse_opaque="true" name="NightVisionBrightMultText" v_pad="0"
width="355">
Light Amplification Multiple
</text>
<slider bottom_delta="-30" can_edit_text="false"
control_name="wmiNightVisionBrightMult" decimal_digits="3" follows="left"
control_name="NightVisionBrightMult" decimal_digits="3" follows="left"
height="10" increment="0.01" initial_val="3.0" label="" left="14"
max_val="10" min_val="1" mouse_opaque="true"
name="wmiNightVisionBrightMult" show_text="true" value="0.7" width="200" />
name="NightVisionBrightMult" show_text="true" value="0.7" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiNightVisionNoiseSizeText" v_pad="0"
left="10" mouse_opaque="true" name="NightVisionNoiseSizeText" v_pad="0"
width="355">
Noise Size
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiNightVisionNoiseSize"
<slider bottom_delta="-30" can_edit_text="false" control_name="NightVisionNoiseSize"
decimal_digits="3" follows="left" height="10" increment="0.1"
initial_val="1" label="" left="14" max_val="100" min_val="1"
mouse_opaque="true" name="wmiNightVisionNoiseSize" show_text="true"
mouse_opaque="true" name="NightVisionNoiseSize" show_text="true"
value="1.0" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiNightVisionNoiseStrengthText"
left="10" mouse_opaque="true" name="NightVisionNoiseStrengthText"
v_pad="0" width="355">
Noise Strength
</text>
<slider bottom_delta="-30" can_edit_text="false"
control_name="wmiNightVisionNoiseStrength" decimal_digits="3"
control_name="NightVisionNoiseStrength" decimal_digits="3"
follows="left" height="10" increment="0.01" initial_val="0.3" label=""
left="14" max_val="1" min_val="0" mouse_opaque="true"
name="wmiNightVisionNoiseStrength" show_text="true" value="1.0" width="200" />
name="NightVisionNoiseStrength" show_text="true" value="1.0" width="200" />
</panel>
<panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"
label="Bloom" left="1" mouse_opaque="true"
name="wmiBloomPanel" width="398">
<check_box bottom="-20" control_name="wmiBloomToggle" follows="left|top"
name="BloomPanel" width="398">
<check_box bottom="-20" control_name="BloomToggle" follows="left|top"
font="SansSerifSmall" height="16" initial_value="false" label="Enable"
left="14" mouse_opaque="true" name="wmiBloomToggle" width="200" />
left="14" mouse_opaque="true" name="BloomToggle" width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-21" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiBloomExtractText" v_pad="0"
left="10" mouse_opaque="true" name="BloomExtractText" v_pad="0"
width="355">
Luminosity Extraction
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiBloomExtract"
<slider bottom_delta="-30" can_edit_text="false" control_name="BloomExtract"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="0.9" label="" left="14" max_val="1" min_val="0"
mouse_opaque="true" name="wmiBloomExtract" show_text="true" value="0.7"
mouse_opaque="true" name="BloomExtract" show_text="true" value="0.7"
width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiBloomSizeText" v_pad="0" width="355">
left="10" mouse_opaque="true" name="BloomSizeText" v_pad="0" width="355">
Bloom Size
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiBloomSize"
<slider bottom_delta="-30" can_edit_text="false" control_name="BloomSize"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="3.0" label="" left="14" max_val="20" min_val="0"
mouse_opaque="true" name="wmiBloomSize" show_text="true" value="1.0"
mouse_opaque="true" name="BloomSize" show_text="true" value="1.0"
width="200" />
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-20" drop_shadow_visible="true" follows="left|top|right"
font="SansSerif" h_pad="0" halign="left" height="16"
left="10" mouse_opaque="true" name="wmiBloomStrengthText" v_pad="0"
left="10" mouse_opaque="true" name="BloomStrengthText" v_pad="0"
width="355">
Bloom Strength
</text>
<slider bottom_delta="-30" can_edit_text="false" control_name="wmiBloomStrength"
<slider bottom_delta="-30" can_edit_text="false" control_name="BloomStrength"
decimal_digits="3" follows="left" height="10" increment="0.01"
initial_val="1.2" label="" left="14" max_val="10" min_val="0"
mouse_opaque="true" name="wmiBloomStrength" show_text="true" value="1.0"
mouse_opaque="true" name="BloomStrength" show_text="true" value="1.0"
width="200" />
</panel>
<panel border="true" bottom="-180" follows="left|top|right|bottom" height="400"

View File

@@ -668,6 +668,10 @@
mouse_opaque="true" name="Day Cycle Editor" width="169">
<on_click function="World.DayCycle" userdata="editor" />
</menu_item_call>
<menu_item_call bottom="-173" enabled="false" height="19" label="Post-Processing Effects" left="0"
mouse_opaque="true" name="Post-Processing Effects" width="169">
<on_click function="World.PostProcess" userdata="editor" />
</menu_item_call>
</menu>
</menu>
<menu bottom="-18" create_jump_keys="true" drop_shadow="true" enabled="true"