//__________________________________________________ void Configuration::readException( const Exception& exception ) { // propagate all features found in mask to the output configuration if( exception.mask() & Exception::FrameBorder ) setFrameBorder( exception.frameBorder() ); if( exception.mask() & Exception::BlendColor ) setBlendColor( exception.blendColor() ); if( exception.mask() & Exception::DrawSeparator ) setSeparatorMode( exception.separatorMode() ); if( exception.mask() & Exception::TitleOutline ) setDrawTitleOutline( exception.drawTitleOutline() ); if( exception.mask() & Exception::SizeGripMode ) setSizeGripMode( exception.sizeGripMode() ); setHideTitleBar( exception.hideTitleBar() ); }
//------------------------------------------------------------------------------ //## Basic TEST_F(Test_UI_UIElement, RenderEffects) { //* [ ] UISprite はデフォルトで BlendMode=Alpha { auto tex1 = Assets::loadTexture(LN_ASSETFILE("Sprite1.png")); //* [ ] Visible auto sprite1 = newObject<UISprite>(); sprite1->setTexture(tex1); sprite1->setPosition(0, 0, 0); sprite1->setVisible(false); //* [ ] BlendMode auto sprite2 = newObject<UISprite>(); sprite2->setTexture(tex1); sprite2->setBlendMode(BlendMode::Add); sprite2->setPosition(32, 0, 0); //* [ ] Opacity auto sprite3 = newObject<UISprite>(); sprite3->setTexture(tex1); sprite3->setPosition(64, 0, 0); sprite3->setOpacity(0.5); //* [ ] ColorScale auto sprite4 = newObject<UISprite>(); sprite4->setTexture(tex1); sprite4->setPosition(96, 0, 0); sprite4->setColorScale(Color(1, 0, 0, 1)); //* [ ] BlendColor auto sprite5 = newObject<UISprite>(); sprite5->setTexture(tex1); sprite5->setPosition(0, 32, 0); sprite5->setBlendColor(Color(1, 0, 0, 1)); //* [ ] Tone auto sprite6 = newObject<UISprite>(); sprite6->setTexture(tex1); sprite6->setPosition(32, 32, 0); sprite6->setTone(ColorTone(0.5, 0.3, 0.1, 1.0)); TestEnv::updateFrame(); ASSERT_SCREEN(LN_ASSETFILE("Result/Test_UI_UIElement-RenderEffects-1.png")); LN_TEST_CLEAN_SCENE; } }
//------------------------------------------------------------------------------ //## Basic TEST_F(Test_Visual_VisualComponent, BuiltinEffects) { // TODO: Builtin shader ごとに行う { auto tex1 = Assets::loadTexture(LN_ASSETFILE("Sprite1.png")); //* [ ] Hide auto sprite1 = Sprite::create(tex1, 3, 3); //sprite1->setShadingModel(ShadingModel::UnLighting); sprite1->setPosition(-6, 0, 0); sprite1->setVisible(false); //* [ ] Normal auto sprite2 = Sprite::create(tex1, 3, 3); //sprite2->setShadingModel(ShadingModel::UnLighting); sprite2->setPosition(-3, 0, 0); //* [ ] Opacity auto sprite3 = Sprite::create(tex1, 3, 3); //sprite3->setShadingModel(ShadingModel::UnLighting); sprite3->setPosition(-6, 3, 0); sprite3->setBlendMode(BlendMode::Alpha); sprite3->setOpacity(0.5); //* [ ] ColorScale auto sprite4 = Sprite::create(tex1, 3, 3); //sprite4->setShadingModel(ShadingModel::UnLighting); sprite4->setPosition(-3, 3, 0); sprite4->setColorScale(Color(1, 0, 0, 1)); //* [ ] BlendColor auto sprite5 = Sprite::create(tex1, 3, 3); //sprite5->setShadingModel(ShadingModel::UnLighting); sprite5->setPosition(0, 3, 0); sprite5->setBlendColor(Color(1, 0, 0, 1)); //* [ ] Tone auto sprite6 = Sprite::create(tex1, 3, 3); //sprite6->setShadingModel(ShadingModel::UnLighting); sprite6->setPosition(3, 3, 0); sprite6->setTone(ColorTone(0.5, 0.3, 0.1, 1.0)); TestEnv::updateFrame(); ASSERT_SCREEN(LN_ASSETFILE("Visual/Result/Test_Visual_VisualComponent-BuiltinEffects-1.png")); LN_TEST_CLEAN_SCENE; } }
gl::Error StateManager9::setBlendDepthRasterStates(const gl::State &glState, unsigned int sampleMask) { const gl::Framebuffer *framebuffer = glState.getDrawFramebuffer(); const gl::BlendState &blendState = glState.getBlendState(); const gl::ColorF &blendColor = glState.getBlendColor(); const gl::RasterizerState &rasterState = glState.getRasterizerState(); const auto &depthStencilState = glState.getDepthStencilState(); bool frontFaceCCW = (glState.getRasterizerState().frontFace == GL_CCW); unsigned int maxStencil = (1 << mCurStencilSize) - 1; // All the depth stencil states depends on the front face ccw variable if (frontFaceCCW != mCurFrontFaceCCW) { forceSetDepthStencilState(); mCurFrontFaceCCW = frontFaceCCW; } for (auto dirtyBit : angle::IterateBitSet(mDirtyBits)) { switch (dirtyBit) { case DIRTY_BIT_BLEND_ENABLED: setBlendEnabled(blendState.blend); break; case DIRTY_BIT_BLEND_COLOR: setBlendColor(blendState, blendColor); break; case DIRTY_BIT_BLEND_FUNCS_EQUATIONS: setBlendFuncsEquations(blendState); break; case DIRTY_BIT_SAMPLE_ALPHA_TO_COVERAGE: setSampleAlphaToCoverage(blendState.sampleAlphaToCoverage); break; case DIRTY_BIT_COLOR_MASK: setColorMask(framebuffer, blendState.colorMaskRed, blendState.colorMaskBlue, blendState.colorMaskGreen, blendState.colorMaskAlpha); break; case DIRTY_BIT_DITHER: setDither(blendState.dither); break; case DIRTY_BIT_CULL_MODE: setCullMode(rasterState.cullFace, rasterState.cullMode, rasterState.frontFace); break; case DIRTY_BIT_DEPTH_BIAS: setDepthBias(rasterState.polygonOffsetFill, rasterState.polygonOffsetFactor, rasterState.polygonOffsetUnits); break; case DIRTY_BIT_STENCIL_DEPTH_MASK: setDepthMask(depthStencilState.depthMask); break; case DIRTY_BIT_STENCIL_DEPTH_FUNC: setDepthFunc(depthStencilState.depthTest, depthStencilState.depthFunc); break; case DIRTY_BIT_STENCIL_TEST_ENABLED: setStencilTestEnabled(depthStencilState.stencilTest); break; case DIRTY_BIT_STENCIL_FUNCS_FRONT: setStencilFuncsFront(depthStencilState.stencilFunc, depthStencilState.stencilMask, glState.getStencilRef(), frontFaceCCW, maxStencil); break; case DIRTY_BIT_STENCIL_FUNCS_BACK: setStencilFuncsBack(depthStencilState.stencilBackFunc, depthStencilState.stencilBackMask, glState.getStencilBackRef(), frontFaceCCW, maxStencil); break; case DIRTY_BIT_STENCIL_WRITEMASK_FRONT: setStencilWriteMask(depthStencilState.stencilWritemask, frontFaceCCW); break; case DIRTY_BIT_STENCIL_WRITEMASK_BACK: setStencilBackWriteMask(depthStencilState.stencilBackWritemask, frontFaceCCW); break; case DIRTY_BIT_STENCIL_OPS_FRONT: setStencilOpsFront(depthStencilState.stencilFail, depthStencilState.stencilPassDepthFail, depthStencilState.stencilPassDepthPass, frontFaceCCW); break; case DIRTY_BIT_STENCIL_OPS_BACK: setStencilOpsBack(depthStencilState.stencilBackFail, depthStencilState.stencilBackPassDepthFail, depthStencilState.stencilBackPassDepthPass, frontFaceCCW); break; default: break; } } if (sampleMask != mCurSampleMask) { setSampleMask(sampleMask); } return gl::Error(GL_NO_ERROR); }
void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBits &dirtyBits) { // TODO(jmadill): Investigate only syncing vertex state for active attributes for (auto dirtyBit : angle::IterateBitSet(dirtyBits | mLocalDirtyBits)) { switch (dirtyBit) { case gl::State::DIRTY_BIT_SCISSOR_TEST_ENABLED: setScissorTestEnabled(state.isScissorTestEnabled()); break; case gl::State::DIRTY_BIT_SCISSOR: setScissor(state.getScissor()); break; case gl::State::DIRTY_BIT_VIEWPORT: setViewport(state.getViewport()); break; case gl::State::DIRTY_BIT_DEPTH_RANGE: setDepthRange(state.getNearPlane(), state.getFarPlane()); break; case gl::State::DIRTY_BIT_BLEND_ENABLED: setBlendEnabled(state.isBlendEnabled()); break; case gl::State::DIRTY_BIT_BLEND_COLOR: setBlendColor(state.getBlendColor()); break; case gl::State::DIRTY_BIT_BLEND_FUNCS: { const auto &blendState = state.getBlendState(); setBlendFuncs(blendState.sourceBlendRGB, blendState.destBlendRGB, blendState.sourceBlendAlpha, blendState.destBlendAlpha); break; } case gl::State::DIRTY_BIT_BLEND_EQUATIONS: { const auto &blendState = state.getBlendState(); setBlendEquations(blendState.blendEquationRGB, blendState.blendEquationAlpha); break; } case gl::State::DIRTY_BIT_COLOR_MASK: { const auto &blendState = state.getBlendState(); setColorMask(blendState.colorMaskRed, blendState.colorMaskGreen, blendState.colorMaskBlue, blendState.colorMaskAlpha); break; } case gl::State::DIRTY_BIT_SAMPLE_ALPHA_TO_COVERAGE_ENABLED: setSampleAlphaToCoverageEnabled(state.isSampleAlphaToCoverageEnabled()); break; case gl::State::DIRTY_BIT_SAMPLE_COVERAGE_ENABLED: setSampleCoverageEnabled(state.isSampleCoverageEnabled()); break; case gl::State::DIRTY_BIT_SAMPLE_COVERAGE: setSampleCoverage(state.getSampleCoverageValue(), state.getSampleCoverageInvert()); break; case gl::State::DIRTY_BIT_DEPTH_TEST_ENABLED: setDepthTestEnabled(state.isDepthTestEnabled()); break; case gl::State::DIRTY_BIT_DEPTH_FUNC: setDepthFunc(state.getDepthStencilState().depthFunc); break; case gl::State::DIRTY_BIT_DEPTH_MASK: setDepthMask(state.getDepthStencilState().depthMask); break; case gl::State::DIRTY_BIT_STENCIL_TEST_ENABLED: setStencilTestEnabled(state.isStencilTestEnabled()); break; case gl::State::DIRTY_BIT_STENCIL_FUNCS_FRONT: { const auto &depthStencilState = state.getDepthStencilState(); setStencilFrontFuncs(depthStencilState.stencilFunc, state.getStencilRef(), depthStencilState.stencilMask); break; } case gl::State::DIRTY_BIT_STENCIL_FUNCS_BACK: { const auto &depthStencilState = state.getDepthStencilState(); setStencilBackFuncs(depthStencilState.stencilBackFunc, state.getStencilBackRef(), depthStencilState.stencilBackMask); break; } case gl::State::DIRTY_BIT_STENCIL_OPS_FRONT: { const auto &depthStencilState = state.getDepthStencilState(); setStencilFrontOps(depthStencilState.stencilFail, depthStencilState.stencilPassDepthFail, depthStencilState.stencilPassDepthPass); break; } case gl::State::DIRTY_BIT_STENCIL_OPS_BACK: { const auto &depthStencilState = state.getDepthStencilState(); setStencilBackOps(depthStencilState.stencilBackFail, depthStencilState.stencilBackPassDepthFail, depthStencilState.stencilBackPassDepthPass); break; } case gl::State::DIRTY_BIT_STENCIL_WRITEMASK_FRONT: setStencilFrontWritemask(state.getDepthStencilState().stencilWritemask); break; case gl::State::DIRTY_BIT_STENCIL_WRITEMASK_BACK: setStencilBackWritemask(state.getDepthStencilState().stencilBackWritemask); break; case gl::State::DIRTY_BIT_CULL_FACE_ENABLED: setCullFaceEnabled(state.isCullFaceEnabled()); break; case gl::State::DIRTY_BIT_CULL_FACE: setCullFace(state.getRasterizerState().cullMode); break; case gl::State::DIRTY_BIT_FRONT_FACE: setFrontFace(state.getRasterizerState().frontFace); break; case gl::State::DIRTY_BIT_POLYGON_OFFSET_FILL_ENABLED: setPolygonOffsetFillEnabled(state.isPolygonOffsetFillEnabled()); break; case gl::State::DIRTY_BIT_POLYGON_OFFSET: { const auto &rasterizerState = state.getRasterizerState(); setPolygonOffset(rasterizerState.polygonOffsetFactor, rasterizerState.polygonOffsetUnits); break; } case gl::State::DIRTY_BIT_RASTERIZER_DISCARD_ENABLED: setRasterizerDiscardEnabled(state.isRasterizerDiscardEnabled()); break; case gl::State::DIRTY_BIT_LINE_WIDTH: setLineWidth(state.getLineWidth()); break; case gl::State::DIRTY_BIT_PRIMITIVE_RESTART_ENABLED: setPrimitiveRestartEnabled(state.isPrimitiveRestartEnabled()); break; case gl::State::DIRTY_BIT_CLEAR_COLOR: setClearColor(state.getColorClearValue()); break; case gl::State::DIRTY_BIT_CLEAR_DEPTH: setClearDepth(state.getDepthClearValue()); break; case gl::State::DIRTY_BIT_CLEAR_STENCIL: setClearStencil(state.getStencilClearValue()); break; case gl::State::DIRTY_BIT_UNPACK_ALIGNMENT: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_UNPACK_ROW_LENGTH: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_UNPACK_IMAGE_HEIGHT: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_UNPACK_SKIP_IMAGES: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_UNPACK_SKIP_ROWS: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_UNPACK_SKIP_PIXELS: // TODO(jmadill): split this setPixelUnpackState(state.getUnpackState()); break; case gl::State::DIRTY_BIT_PACK_ALIGNMENT: // TODO(jmadill): split this setPixelPackState(state.getPackState()); break; case gl::State::DIRTY_BIT_PACK_REVERSE_ROW_ORDER: // TODO(jmadill): split this setPixelPackState(state.getPackState()); break; case gl::State::DIRTY_BIT_PACK_ROW_LENGTH: // TODO(jmadill): split this setPixelPackState(state.getPackState()); break; case gl::State::DIRTY_BIT_PACK_SKIP_ROWS: // TODO(jmadill): split this setPixelPackState(state.getPackState()); break; case gl::State::DIRTY_BIT_PACK_SKIP_PIXELS: // TODO(jmadill): split this setPixelPackState(state.getPackState()); break; case gl::State::DIRTY_BIT_DITHER_ENABLED: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_GENERATE_MIPMAP_HINT: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_SHADER_DERIVATIVE_HINT: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_READ_FRAMEBUFFER_BINDING: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_READ_FRAMEBUFFER_OBJECT: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_DRAW_FRAMEBUFFER_OBJECT: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_RENDERBUFFER_BINDING: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_VERTEX_ARRAY_BINDING: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_VERTEX_ARRAY_OBJECT: state.getVertexArray()->syncImplState(); break; case gl::State::DIRTY_BIT_PROGRAM_BINDING: // TODO(jmadill): implement this break; case gl::State::DIRTY_BIT_PROGRAM_OBJECT: // TODO(jmadill): implement this break; default: { ASSERT(dirtyBit >= gl::State::DIRTY_BIT_CURRENT_VALUE_0 && dirtyBit < gl::State::DIRTY_BIT_CURRENT_VALUE_MAX); size_t attribIndex = static_cast<size_t>(dirtyBit) - gl::State::DIRTY_BIT_CURRENT_VALUE_0; setAttributeCurrentData(attribIndex, state.getVertexAttribCurrentValue( static_cast<unsigned int>(attribIndex))); break; } } mLocalDirtyBits.reset(); } }
//__________________________________________________ Configuration::Configuration( KConfigGroup group ) { // used to set default values when entries are not found in kconfig Configuration defaultConfiguration; // title alignment setTitleAlignment( titleAlignment( group.readEntry( OxygenConfig::TITLE_ALIGNMENT, defaultConfiguration.titleAlignmentName( false ) ), false ) ); // center title on full width setCenterTitleOnFullWidth( group.readEntry( OxygenConfig::CENTER_TITLE_ON_FULL_WIDTH, defaultConfiguration.centerTitleOnFullWidth() ) ); // button size setButtonSize( buttonSize( group.readEntry( OxygenConfig::BUTTON_SIZE, defaultConfiguration.buttonSizeName( false ) ), false ) ); // frame border setFrameBorder( frameBorder( group.readEntry( OxygenConfig::FRAME_BORDER, defaultConfiguration.frameBorderName( false ) ), false ) ); // blend color setBlendColor( blendColor( group.readEntry( OxygenConfig::BLEND_COLOR, defaultConfiguration.blendColorName( false ) ), false ) ); // size grip setSizeGripMode( sizeGripMode( group.readEntry( OxygenConfig::SIZE_GRIP_MODE, defaultConfiguration.sizeGripModeName( false ) ), false ) ); // separator mode if( !group.readEntry( OxygenConfig::DRAW_SEPARATOR, defaultConfiguration.separatorMode() != SeparatorNever ) ) { setSeparatorMode( SeparatorNever ); } else if( group.readEntry( OxygenConfig::SEPARATOR_ACTIVE_ONLY, defaultConfiguration.separatorMode() == SeparatorActive ) ) { setSeparatorMode( SeparatorActive ); } else setSeparatorMode( SeparatorAlways ); // title outline setDrawTitleOutline( group.readEntry( OxygenConfig::DRAW_TITLE_OUTLINE, defaultConfiguration.drawTitleOutline() ) ); // hide title bar setHideTitleBar( group.readEntry( OxygenConfig::HIDE_TITLEBAR, defaultConfiguration.hideTitleBar() ) ); // drop shadows setUseDropShadows( group.readEntry( OxygenConfig::USE_DROP_SHADOWS, defaultConfiguration.useDropShadows() ) ); // oxygen shadows setUseOxygenShadows( group.readEntry( OxygenConfig::USE_OXYGEN_SHADOWS, defaultConfiguration.useOxygenShadows() ) ); // transparency setTransparencyEnabled( group.readEntry( OxygenConfig::TRANSPARENCY_ENABLED, defaultConfiguration.transparencyEnabled() ) ); // close from menu button setCloseFromMenuButton( group.readEntry( OxygenConfig::CLOSE_FROM_MENU_BUTTON, defaultConfiguration.closeFromMenuButton() ) ); // buttonSpacing setUseNarrowButtonSpacing( group.readEntry( OxygenConfig::NARROW_BUTTON_SPACING, defaultConfiguration.useNarrowButtonSpacing() ) ); // background opacity /* this is the decoration specific value it is overwritten by the style ("common") opacity, if opacityFromStyle is set to true */ setBackgroundOpacity( group.readEntry( OxygenConfig::BACKGROUND_OPACITY, defaultConfiguration.backgroundOpacity() ) ); setOpacityFromStyle( group.readEntry( OxygenConfig::OPACITY_FROM_STYLE, defaultConfiguration.opacityFromStyle() ) ); // extended window border setUseExtendedWindowBorder( group.readEntry( OxygenConfig::EXTENDED_WINDOW_BORDERS, defaultConfiguration.useExtendedWindowBorder() ) ); // animations setAnimationsEnabled( group.readEntry( OxygenConfig::ANIMATIONS_ENABLED, defaultConfiguration.animationsEnabled() ) ); setButtonAnimationsEnabled( group.readEntry( OxygenConfig::BUTTON_ANIMATIONS_ENABLED, defaultConfiguration.buttonAnimationsEnabled() ) ); setTitleAnimationsEnabled( group.readEntry( OxygenConfig::TITLE_ANIMATIONS_ENABLED, defaultConfiguration.titleAnimationsEnabled() ) ); setShadowAnimationsEnabled( group.readEntry( OxygenConfig::SHADOW_ANIMATIONS_ENABLED, defaultConfiguration.shadowAnimationsEnabled() ) ); setTabAnimationsEnabled( group.readEntry( OxygenConfig::TAB_ANIMATIONS_ENABLED, defaultConfiguration.tabAnimationsEnabled() ) ); // animations duration setButtonAnimationsDuration( group.readEntry( OxygenConfig::BUTTON_ANIMATIONS_DURATION, defaultConfiguration.buttonAnimationsDuration() ) ); setTitleAnimationsDuration( group.readEntry( OxygenConfig::TITLE_ANIMATIONS_DURATION, defaultConfiguration.titleAnimationsDuration() ) ); setShadowAnimationsDuration( group.readEntry( OxygenConfig::SHADOW_ANIMATIONS_DURATION, defaultConfiguration.shadowAnimationsDuration() ) ); setTabAnimationsDuration( group.readEntry( OxygenConfig::TAB_ANIMATIONS_DURATION, defaultConfiguration.tabAnimationsDuration() ) ); }