void RotationsViewer::initializeGui() { glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT); TwGLUTModifiersFunc(glutGetModifiers); TwInit(TW_OPENGL, NULL); TwWindowSize(mWindowWidth, mWindowHeight); TwCopyStdStringToClientFunc(onCopyStdStringToClient); mDemoBar = TwNewBar("Demo controls"); TwDefine(" 'Demo controls' size='200 175' position='5 5' iconified=false fontresizable=false alpha=200"); TwEnumVal modeTypeEV[] = { { DEMO1, "Convert" }, { DEMO2, "Curve" } }; modeType = TwDefineEnum("ModeType", modeTypeEV, 2); TwAddVarRW(mDemoBar, "Demo", modeType, &mMode, NULL); TwAddVarRW(mDemoBar, "X Angle", TW_TYPE_DOUBLE, &mXAngle, " group='Convert params' "); TwAddVarRW(mDemoBar, "Y Angle", TW_TYPE_DOUBLE, &mYAngle, " group='Convert params' "); TwAddVarRW(mDemoBar, "Z Angle", TW_TYPE_DOUBLE, &mZAngle, " group='Convert params' "); TwEnumVal rooTypeEV[] = { { XYZ, "XYZ" }, { XZY, "XZY" }, { YXZ, "YXZ" }, { YZX, "YZX" }, { ZXY, "ZXY" }, { ZYX, "ZYX" } }; rooType = TwDefineEnum("RooType", rooTypeEV, 6); TwAddVarRW(mDemoBar, "Rot Order", rooType, &mRotOrder, " group='Convert params' "); TwEnumVal splineTypeEV[] = { { ASplineQuat::LINEAR, "Linear" }, { ASplineQuat::CUBIC, "Cubic" } }; splineType = TwDefineEnum("SplineType", splineTypeEV, 2); TwAddVarCB(mDemoBar, "Spline type", splineType, onSetStyleCb, onGetStyleCb, this, " group='Curve params'"); }
int createTweakBar(context_t *ctx, int scene) { const char me[]="createTweakBar"; char buff[128]; int EE; /* we have an error */ EE = 0; // NOTE: these are nice to have twBumpMappingModes=TwDefineEnum("BumpMappingModes", twBumpMappingModesEV, 3); twFilteringModes=TwDefineEnum("FilteringModes", twFilteringModesEV, 4); twObjects=TwDefineEnum("Objects", twObjectsEV, 10); twCubeMaps=TwDefineEnum("CubeMap", twCubeMapsEV, 3); twShaders=TwDefineEnum("Shader", twShadersEV, 3); /* Create a tweak bar for interactive parameter adjustment */ if (!EE) EE |= !(ctx->tbar = TwNewBar(TBAR_NAME)); /* documentation for the TwDefine parameter strings here: http://www.antisphere.com/Wiki/tools:anttweakbar:twbarparamsyntax */ /* add a message to be seen in the "help" window */ if (!EE) EE |= !TwDefine(" GLOBAL help='This description of Project 2 " "has not been changed by anyone but students " "are encouraged to write something descriptive " "here.' "); /* change location where bar will be drawn, over to the right some to expose more of the left edge of window. Note that we are exploiting the automatic compile-time concatentation of strings in C, which connects TBAR_NAME with the rest of the string to make one contiguous string */ sprintf(buff, TBAR_NAME " position='%d %d' ", ctx->winSizeX - ctx->tbarSizeX - ctx->tbarMargin, ctx->tbarMargin); if (!EE) EE |= !TwDefine(buff); /* adjust other aspects of the bar */ sprintf(buff, TBAR_NAME " color='0 0 0' alpha=10 size='%d %d' ", ctx->tbarSizeX, ctx->tbarSizeY); if (!EE) EE |= !TwDefine(buff); // NOTE: we broke this section out for easy update of tweak bar vars per-scene if (!EE) EE |= updateTweakBarVars(scene); /* see also: http://www.antisphere.com/Wiki/tools:anttweakbar:twtype http://www.antisphere.com/Wiki/tools:anttweakbar:twdefineenum */ if (EE) { spotErrorAdd("%s: AntTweakBar initialization failed:\n\t%s", me, TwGetLastError()); return 1; } return 0; }
void AntTweakBarWrapper::Init() { TwInit(TW_OPENGL, NULL); m_control_panel_bar = TwNewBar("Control Panel"); //TwDefine(" 'Control Panel' size='200 210' position='114 10' color='255 255 255' text=dark "); char control_bar_pos_string [255]; sprintf(control_bar_pos_string, "'Control Panel' position='%d 10' color='255 255 0' ", DEFAULT_SCREEN_WIDTH-210); TwDefine(control_bar_pos_string); TwAddVarRW(m_control_panel_bar, "Start Simulation", TwType(sizeof(bool)), &(g_start_simulation), " label='Start Simulation' key=s group='Debug Information' help='Toggle simulation mode.'"); TwAddVarRW(m_control_panel_bar, "Render FP", TwType(sizeof(bool)), &(g_show_render), " label='Render FP' key=w group='Debug Information' help='Toggle render display mode.'"); TwAddVarRW(m_control_panel_bar, "Wireframe", TwType(sizeof(bool)), &(g_show_wireframe), " label='Wireframe mode' key=w group='Debug Information' help='Toggle wireframe display mode.'"); TwAddVarRW(m_control_panel_bar, "Edge List", TwType(sizeof(bool)), &(g_show_edgelist), " label='Edgelist mode' group='Debug Information' help='Toggle edgelist display mode.'"); TwAddVarRW(m_control_panel_bar, "Line Width", TW_TYPE_FLOAT, &(g_linewidth),"label='Line Width' min=0 max=100 step=0.05 help='line width' group='Debug Information'"); TwAddVarRW(m_control_panel_bar, "Fixed Vertex", TwType(sizeof(bool)), &(g_show_fixedvertex), " label='Fixed Vertex' key=w group='Debug Information' help='Toggle fixed vertex mode.'"); TwAddVarRW(m_control_panel_bar, "Point Size", TW_TYPE_FLOAT, &(g_pointsize),"label='Point Size' min=0 max=100 step=0.05 help='Point Size' group='Debug Information'"); TwAddVarRW(m_control_panel_bar, "Zoom", TW_TYPE_FLOAT, &(cameraDistance),"label='Zoom Mode' min=-30 max=30 step=0.1 keyIncr=z keyDecr=Z help='zoom camera' group='Camera'"); m_sim_bar = TwNewBar("Simulation Control"); TwDefine("'Simulation Control' position='0 0' color='255 0 0'"); TwEnumVal shapeEV[NUM_SIMULATION] = { {PositionBasedDynamic, "Position Based Dynamic"}, {MassSpring, "Mass Spring"}, {FiniteElement, "Finite Element"}, {FastMassSpring, "Fast Mass Spring"}, {ProjectiveDynamic, "Projective Dynamic"} }; TwType simmethod = TwDefineEnum("simmethod", shapeEV, NUM_SIMULATION); TwAddVarRW(m_sim_bar, "Simulation Method", simmethod, &g_CurrentMethod, " keyIncr='<' keyDecr='>' help='Change Simulation Method.' "); }
void initGUI() { // Initialize AntTweakBar GUI if (!TwInit(TW_OPENGL, NULL)) { assert(0); } TwWindowSize(g_WindowWidth, g_WindowHeight); TwBar *controlBar = TwNewBar("Controls"); TwDefine(" Controls position='10 10' size='200 320' refresh=0.1 "); TwAddVarCB(controlBar, "use_shaders", TW_TYPE_BOOLCPP, cbSetShaderStatus, cbGetShaderStatus, NULL, " label='shaders' key=s help='Turn programmable pipeline on/off.' "); // Shader panel setup TwAddVarRW(controlBar, "vs", TW_TYPE_BOOLCPP, &g_UseVertexShader, " group='Shaders' label='vertex' key=v help='Toggle vertex shader.' "); TwAddVarRW(controlBar, "gs", TW_TYPE_BOOLCPP, &g_UseGeometryShader, " group='Shaders' label='geometry' key=g help='Toggle geometry shader.' "); TwAddVarRW(controlBar, "fs", TW_TYPE_BOOLCPP, &g_UseFragmentShader, " group='Shaders' label='fragment' key=f help='Toggle fragment shader.' "); TwAddButton(controlBar, "build", cbCompileShaderProgram, NULL, " group='Shaders' label='build' key=b help='Build shader program.' "); //TwDefine( " Controls/Shaders readonly=true "); // Render panel setup TwAddVarRW(controlBar, "wiremode", TW_TYPE_BOOLCPP, &g_WireMode, " group='Render' label='wire mode' key=w help='Toggle wire mode.' "); TwAddVarRW(controlBar, "face_culling", TW_TYPE_BOOLCPP, &g_FaceCulling, " group=Render label='face culling' key=c help='Toggle face culling.' "); // Scene panel setup TwEnumVal geometry_type[] = { { ELEPHANT_GEOMETRY , "Elephant"}, { CUBE_GEOMETRY , "Cube" }, }; TwType geom_type = TwDefineEnum("Model", geometry_type, NUM_GEOMETRY_TYPES); TwAddVarRW(controlBar, "model", geom_type, &g_GeometryType, " group='Scene' keyIncr=Space help='Change model.' "); TwAddVarRW(controlBar, "auto-rotation", TW_TYPE_BOOLCPP, &g_SceneRotEnabled, " group='Scene' label='rotation' key=r help='Toggle scene rotation.' "); TwAddVarRW(controlBar, "Translate", TW_TYPE_FLOAT, &g_SceneTraZ, " group='Scene' label='translate' min=1 max=1000 step=0.5 keyIncr=t keyDecr=T help='Scene translation.' "); TwAddVarRW(controlBar, "SceneRotation", TW_TYPE_QUAT4F, &g_SceneRot, " group='Scene' label='rotation' open help='Toggle scene orientation.' "); }
void SSAO::BuildUI() { TwInit(TW_DIRECT3D11, _device); TwWindowSize(_screenWidth, _screenHeight); _bar = TwNewBar("AmbientOcclusion"); TwDefine(" GLOBAL help='This example shows how to integrate AntTweakBar into a DirectX11 application.' "); // Message added to the help bar. int barSize[2] = {300, 375}; TwSetParam(_bar, NULL, "size", TW_PARAM_INT32, 2, barSize); TwAddVarCB(_bar, "Rad", TW_TYPE_FLOAT, SSAO::SetRad, SSAO::GetRad, this, "group=ShaderParams min=0 max=20 step=0.001 keyincr=+ keydecr=-"); TwAddVarCB(_bar, "TotalStr", TW_TYPE_FLOAT, SSAO::SetTotStr, SSAO::GetTotStr, this, "group=ShaderParams min=0 max=50 step=0.1 keyincr=+ keydecr=-"); TwAddVarCB(_bar, "Strength", TW_TYPE_FLOAT, SSAO::SetStrength, SSAO::GetStrength, this, "group=ShaderParams min=0.1 max=100 step=0.1 keyincr=+ keydecr=-"); TwAddVarCB(_bar, "Offset", TW_TYPE_FLOAT, SSAO::SetOffset, SSAO::GetOffset, this, "group=ShaderParams min=0 max=100 step=0.5 keyincr=+ keydecr=-"); TwAddVarCB(_bar, "Falloff", TW_TYPE_FLOAT, SSAO::SetFalloff, SSAO::GetFalloff, this, "group=ShaderParams min=0 max=0.01 step=0.00001 keyincr=+ keydecr=-"); TwAddVarCB(_bar, "BlurSize", TW_TYPE_FLOAT, SSAO::SetBlur, SSAO::GetBlur, this, "group=ShaderParams min=1 max=16 step=1 keyincr=+ keydecr=-"); TwAddButton(_bar, "Reset", SSAO::ResetButton, this, ""); TwAddButton(_bar, "ShowDebug", SSAO::ShowDebug, this, ""); TwEnumVal* a = new TwEnumVal[3]; a[0].Value = 0; a[0].Label = "buddha"; a[1].Value = 1; a[1].Label = "hairball"; a[2].Value = 2; a[2].Label = "sib"; _index = 0; TwType actMesh = TwDefineEnum("mesh", a, 3); TwAddVarCB(_bar, "ActiveVol", actMesh, SSAO::SetMesh, SSAO::GetMesh, this, " group='Mesh' keyIncr=Backspace keyDecr=SHIFT+Backspace help='Stop or change the rotation mode.' "); }
void outPut::init_Bars() { b_scene = TwNewBar("Scene"); _scene3d.distance = _dimensions.x+_dimensions.y; _scene3d.zoom = 60; _scene3d.focus = coords3d<float>::retournercoords3d(_dimensions.x/2,_dimensions.y/2,0); //_scene3d.orientation = {0, 0, 0, 1}; // direction pointing to +x and +y _scene3d.orientation[0]=_scene3d.orientation[1]=_scene3d.orientation[2]=0; _scene3d.orientation[3]=1; TwAddVarRW(b_scene, "Orientation", TW_TYPE_QUAT4F, &(_scene3d.orientation),"axisx=x axisy=y axisz=z"); TwAddVarRW(b_scene, "Distance", TW_TYPE_DOUBLE, &(_scene3d.distance),""); TwAddVarRW(b_scene, "Zoom", TW_TYPE_DOUBLE, &(_scene3d.zoom),"min = 5 max = 200"); TwAddVarRW(b_scene, "x", TW_TYPE_FLOAT, &(_scene3d.focus.x), "group = 'Focus' "); TwAddVarRW(b_scene, "y", TW_TYPE_FLOAT, &(_scene3d.focus.y), "group = 'Focus' "); TwAddVarRW(b_scene, "z", TW_TYPE_FLOAT, &(_scene3d.focus.z), "group = 'Focus'"); TwAddButton(b_scene, "Centrer", cbCenterView, this, " group = 'Focus' "); TwAddVarRW(b_scene, "Test de profondeur résultat", TW_TYPE_BOOLCPP, &(_reg.ZTEST_RESULT), "label='Z test resultat'"); TwAddVarRW(b_scene, "Temps de calcul (ms)", TW_TYPE_INT32, &(_status.drawDelay), "min=0 max=1000"); //_scene3d.lightDir = {1,1,-1}; _scene3d.lightDir[0]=_scene3d.lightDir[1]=1; _scene3d.lightDir[2]=-1; //_scene3d.lightPos = {-1,-1,1,0}; _scene3d.lightPos[0]=_scene3d.lightPos[1]=-1; _scene3d.lightPos[2]=1; _scene3d.lightPos[3]=0; TwAddVarRW(b_scene, "Direction", TW_TYPE_DIR3F, &(_scene3d.lightDir), "group = Lumiere" ); TwAddVarRW(b_scene, "Directionnelle", TW_TYPE_FLOAT, &(_scene3d.lightPos[3]), "group = Lumiere min=0 max =1" ); b_reglages = TwNewBar("Reglages"); TwAddVarRO(b_reglages, "MAX_FPS", TW_TYPE_INT32, &(_reg.MAX_FPS), "group='Window settings'"); TwAddButton(b_reglages, "Recalculer", recalculate, this, " group = Rendu "); TwAddVarRW(b_reglages, "Multiplicateur", TW_TYPE_DOUBLE, &(_reg.MULTIPLIER), "group = 'Rendu' min = 0 max = 100"); TwType colorsType; colorsType = TwDefineEnum("ColorsType", NULL, 0); //TwAddVarRW(b_reglages, "Couleurs", colorsType, &(_reg.COLORS), " enum='0 {Réelles}, 1 {Colorisé}, 2 {Uniforme}'"); TwAddVarRW(b_reglages, "Filaire", TW_TYPE_BOOLCPP, &(_reg.WIREFRAME), " group = Rendu "); TwAddVarRW(b_reglages, "Normales", TW_TYPE_BOOLCPP, &(_reg.DRAW_NORMALS), "group = 'Rendu'"); TwAddVarRW(b_reglages, "Couleur unie", TW_TYPE_COLOR3F, &(_reg.UNIFORM_COLOR), "colormode=hls group = 'Rendu'"); b_postprocess = TwNewBar("Post-processing"); _effect = 0; TwAddVarRW(b_postprocess, "Effet", TW_TYPE_INT32, &(_effect),"max=20 keyincr = p keydecr = m"); b_pathfind = TwNewBar("Pathfind"); TwAddVarRW(b_pathfind, "En cours", TW_TYPE_BOOLCPP, &(_status.running), "help='Fermer le programme' key=ESC"); TwAddVarRW(b_pathfind, "Pause", TW_TYPE_BOOLCPP, &(_status.pause), "key=t"); TwSetTopBar(b_scene); TwDefine(" Reglages iconified=true "); TwDefine(" Pathfind iconified=true "); TwDefine(" Post-processing iconified=true "); }
/* * Ui_Init */ void Ui_Init(void) { const TwEnumVal OffOrOn[] = { { 0, "Off" }, { 1, "On" } }; const TwEnumVal OffLowMediumHigh[] = { { 0, "Off" }, { 1, "Low" }, { 2, "Medium" }, { 3, "High" } }; memset(&ui, 0, sizeof(ui)); TwInit(TW_OPENGL, NULL); ui.OffOrOn = TwDefineEnum("OnOrOff", OffOrOn, lengthof(OffOrOn)); ui.OffLowMediumHigh = TwDefineEnum("OffLowMediumHigh", OffLowMediumHigh, lengthof(OffLowMediumHigh)); ui.root = Ui_Root(); ui.servers = Ui_Servers(); ui.controls = Ui_Controls(); ui.player = Ui_Player(); ui.system = Ui_System(); Cmd_AddCommand("ui_restart", Ui_Restart_f, "Restarts the menus subsystem"); }
void TweakRivers::updateBar(TwBar *bar) { if (drawer == NULL) { return; } LifeCycleParticleLayer *lifeLayer = drawer->getParticles()->getLayer<LifeCycleParticleLayer>(); WorldParticleLayer *worldLayer = drawer->getParticles()->getLayer<WorldParticleLayer>(); TwAddVarCB(bar, "pauseFlow", TW_TYPE_BOOL8, SetPausedCallback, GetPausedCallback, worldLayer, " group=Flow label='Update Particles' help='Activate/Deactivate the flow' false='True' true='False' "); TwAddVarCB(bar, "timeStep", TW_TYPE_FLOAT, SetTimeStepCallback, GetTimeStepCallback, drawer.get(), " group=Flow label='Time Step' help='Number of Time Steps between each frame' step=0.01 "); TwAddVarCB(bar, "flowSpeed", TW_TYPE_FLOAT, SetFlowSpeedCallback, GetFlowSpeedCallback, worldLayer, " group=Flow label='Flow Speed' help='Flow Speed' step=0.01 "); TwAddButton(bar, "Clear", ClearParticlesCallback, drawer->getParticles()->getStorage().get(), "group='Flow'"); TwType twMeshDisplayType = TwDefineEnum("MeshDisplayType", NULL, 0); TwAddVarCB(bar, "displayMesh", twMeshDisplayType, SetMeshDisplayTypeCallback, GetMeshDisplayTypeCallback, drawer.get(), "group=Display label='Display Mode' enum='0 {Hidden}, 1 {Particle Coverage}, 5 {Advected}, 6 {Pre-Advected}, 10 {Non Advected} ' "); TwAddVarCB(bar, "displayGrid", TW_TYPE_BOOL8, SetDisplayGridCallback, GetDisplayGridCallback, drawer.get(), "group=Display label='Display Grid' "); TwAddVarCB(bar, "displayParticles", TW_TYPE_BOOL8, SetDisplayParticlesCallback, GetdisplayParticlesCallback, drawer.get(), "group=Display label='Display Particles' "); TwAddVarCB(bar, "displayVelocities", TW_TYPE_BOOL8, SetDisplayVelocitiesCallback, GetDisplayVelocitiesCallback, drawer.get(), "group=Display label='Display Velocities' "); TwAddVarCB(bar, "displaySun", TW_TYPE_BOOL8, SetDisplaySunEffectsCallback, GetDisplaySunEffectsCallback, drawer.get(), "group=Display label='Display Sun Effects' "); TwAddVarCB(bar, "waveSlope", TW_TYPE_FLOAT, SetWaveSlopeCallback, GetWaveSlopeCallback, drawer.get(), "group=Display label='Wave slope factor' "); TwAddVarCB(bar, "waveLength", TW_TYPE_FLOAT, SetWaveLengthCallback, GetWaveLengthCallback, drawer.get(), "group=Display label='Wave length factor' "); TwAddVarCB(bar, "riverDepth", TW_TYPE_FLOAT, SetRiverDepthCallback, GetRiverDepthCallback, drawer.get(), "group=Display label='River Depth' min='1' step='0.1' "); TwAddVarCB(bar, "bedLength", TW_TYPE_FLOAT, SetBedLengthCallback, GetBedLengthCallback, drawer.get(), "group=Display label='Bed texture length' min='0.001' step='0.001'"); TwAddVarCB(bar, "fadeInTime", TW_TYPE_FLOAT, SetFadeInCallback, GetFadeInCallback, lifeLayer, "group=Other label='Fading in Time' step=0.1 "); TwAddVarCB(bar, "fadeOutTime", TW_TYPE_FLOAT, SetFadeOutCallback, GetFadeOutCallback, lifeLayer, "group=Other label='Fading Out Time' step=0.1 "); TwAddVarCB(bar, "maxAge", TW_TYPE_FLOAT, SetMaxAgeCallback, GetMaxAgeCallback, lifeLayer, "group=Other label='Max Particle Age' step=0.1 "); TwAddVarCB(bar, "particleSize", TW_TYPE_FLOAT, SetRadiusCallback, GetRadiusCallback, drawer.get(), "group=Other label='Particle Size' min=0.020 step=0.1 "); // TwAddVarCB(bar, "maxParticles", TW_TYPE_INT32, SetMaxPCallback, GetMaxPCallback, drawer.get()->particles, "group=Other label='Max Particles' min=0 "); TwAddVarCB(bar, "slipParameter", TW_TYPE_FLOAT, SetSlipCallback, GetSlipCallback, drawer.get(), "group=Other label='Slip Parameter' step='0.05' "); TwAddVarCB(bar, "potentialDelta", TW_TYPE_FLOAT, SetPotentialDeltaCallback, GetPotentialDeltaCallback, drawer.get(), "group=Other label='Potential Delta' min=0.01 step='0.01' "); // Defining groups TwSetParam(bar, "Flow", "readonly", TW_PARAM_CSTRING, 1, "false"); TwSetParam(bar, "Flow", "opened", TW_PARAM_INT32, 1, &(barStates[0])); TwSetParam(bar, "Flow", "group", TW_PARAM_CSTRING, 1, "riverManager"); TwSetParam(bar, "Display", "readonly", TW_PARAM_CSTRING, 1, "false"); TwSetParam(bar, "Display", "opened", TW_PARAM_INT32, 1, &(barStates[1])); TwSetParam(bar, "Display", "group", TW_PARAM_CSTRING, 1, "riverManager"); TwSetParam(bar, "Other", "readonly", TW_PARAM_CSTRING, 1, "false"); TwSetParam(bar, "Other", "opened", TW_PARAM_INT32, 1, &(barStates[2])); TwSetParam(bar, "Other", "group", TW_PARAM_CSTRING, 1, "riverManager"); TwSetParam(bar, "riverManager", "readonly", TW_PARAM_CSTRING, 1, "false"); TwSetParam(bar, "riverManager", "opened", TW_PARAM_INT32, 1, &(barStates[3])); TwSetParam(bar, "riverManager", "label", TW_PARAM_CSTRING, 1, getName()); currentBar = bar; }
void Fluids::createUI() { UIBar* pbar = UI::CreateBar("fluids"); TwEnumVal dm[] = { {DM_DENSITY, "Density"}, {DM_VELOCITY0, "Velocity0"}, {DM_VELOCITY, "Velocity"} }; TwType dmType = TwDefineEnum("DrawMode", dm, 3); UI::CreateVar(pbar, "DrawMode", dmType, &draw_mode_, "keyincr=] keydecr=["); UI::CreateVar(pbar, "ViewMode", dmType, &view_mode_, "keyincr=l keydecr=;"); UI::AddButton(pbar, "density step", DensStepCallback, this, "key=a"); UI::AddButton(pbar, "updvel step", UpdateVelStepCallback, this, "key=v"); UI::CreateVar(pbar, "update", TW_TYPE_BOOLCPP, &update_, "key=SPACE"); }
UiDropDown::UiDropDown( const std::string& pName, const std::vector<std::pair<int,std::string>>& selectionList ) :UiElement(pName), m_selection(0) { m_selectionEnum = new TwEnumVal[selectionList.size()]; for ( unsigned int i =0; i < selectionList.size(); i++ ) { m_selectionEnum[i].Value = selectionList[i].first; m_selectionEnum[i].Label = selectionList[i].second.c_str(); } m_selectionType = TwDefineEnum( (pName+"Type").c_str(), m_selectionEnum, selectionList.size() ); }
void SetupAntTweakBar() { TwInit(TW_DIRECT3D11, (void*)device); TwWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); antbar = TwNewBar("VoxelAO"); TwDefine(" VoxelAO size='260 320' "); #ifdef ENABLE_VOXELDRAW TwAddVarRW(antbar, "voxeldraw", TW_TYPE_BOOLCPP, &enableDebugDraw, " label='Draw Voxels' group='Voxels'"); TwAddVarRO(antbar, "voxelCounter", TW_TYPE_UINT32, &voxelCounter, " label='Drawn voxels' group='Voxels'"); #endif TwAddVarRO(antbar, "FPS", TW_TYPE_UINT32, &FPS, " label='FPS' group='Timing'"); TwAddVarRO(antbar, "aotime", TW_TYPE_FLOAT, &AOTime, " label='AO Time' group='Timing'"); TwAddVarRO(antbar, "voxtime", TW_TYPE_FLOAT, &voxelTime, " label='Voxel Time' group='Timing'"); TwAddVarRW(antbar, "kernaldraw", TW_TYPE_BOOLCPP, &enableDrawKernel, " label='Draw Kernel' group='Kernel'"); TwAddVarRW(antbar, "sizeX", TW_TYPE_INT32, &sampleOptions.sizeX, " label='Kernel size X' group='Kernel'"); TwDefine("VoxelAO/sizeX min=1 max=32"); TwAddVarRW(antbar, "sizeY", TW_TYPE_INT32, &sampleOptions.sizeY, " label='Kernel Size Y' group='Kernel'"); TwDefine("VoxelAO/sizeY min=1 max=32"); TwAddVarRW(antbar, "steps", TW_TYPE_INT32, &sampleOptions.steps, " label='Kernel Steps' group='Kernel'"); TwDefine("VoxelAO/steps min=1"); TwAddVarRW(antbar, "length", TW_TYPE_FLOAT, &sampleOptions.length, " label='Kernel Length' group='Kernel'"); TwDefine("VoxelAO/length min=1"); { TwEnumVal enumval[] = { { DRAW_NORMAL, "Normal" },{ DRAW_NO_AO, "No AO" },{ DRAW_AO_ONLY, "Only AO"} }; TwType type = TwDefineEnum("DEBUG_DRAW_MODE", enumval, ARRAYSIZE(enumval)); TwAddVarRW(antbar, "Drawmode", type, &drawMode, " label='Draw mode' group='Draw' "); } { TwEnumVal enumval[] = { { _64, "64x64x64" },{ _128, "128x128x128" },{ _256, "256x256x256" },{ _512, "512x512x512" },{ _1024, "1024x1024x1024" } }; TwType type = TwDefineEnum("VoxelResolution", enumval, ARRAYSIZE(enumval)); TwAddVarRW(antbar, "voxelres", type, &voxelRes, " label='Voxel Resolution' group='Voxels' "); } }
void TweakDemEditor::updateBar(TwBar *bar) { EditorHandler *e = dynamic_cast<EditorHandler*>(eventHandler.get()); if (e == NULL) { return; } // Adding the list of edited graphs TwEnumVal *editModes= new TwEnumVal[2]; editModes[0].Value = ADD; editModes[0].Label = "ADD"; editModes[1].Value = MAX; editModes[1].Label = "MAX"; TwType editType = TwDefineEnum("EditType", editModes, 2); TwAddVarCB(bar, "EditMode", editType, SetDemEditModeCallback, GetDemEditModeCallback, NULL, " label='Edit Mode' group='DemEditor' key='e' "); TwAddVarRW(bar, "demBrushRadius", TW_TYPE_FLOAT, &(e->relativeRadius), " group=DemEditor label='Brush Radius' help='Size of the Dem Editor Brush' min=0.0 step=0.01 "); TwAddVarRW(bar, "demBrushColor", TW_TYPE_FLOAT, &(e->brushColor[0]), " group=DemEditor label='Brush altitude' help='Altitude applied to the texture' step='0.1' "); TwAddButton(bar, "demReset", ResetDemCB, NULL, " group=DemEditor label='Reset' help='Cancels all editing operations performed on active editors' "); char def[200]; sprintf(def, "%s/DemEditor label='Dem Edition'", TwGetBarName(bar)); char name[20]; TwDefine(def); set<string> groupNames; for (int i = 0; i < e->getEditorCount(); i++) { string n = e->getEditor(i)->getGroup(); if (groupNames.find(n) == groupNames.end()) { groupNames.insert(n); sprintf(name, "demEditorGroup%d", i); sprintf(def, " group=%s label='Activate %s' help='Activate or Deactivate the selected Editor' ", n.c_str(), n.c_str()); TwAddVarCB(bar, name, TW_TYPE_BOOLCPP, SetDemEditorGroupStateCallback, GetDemEditorGroupStateCallback, e->getEditor(i), def); sprintf(def, " group=%s ", n.c_str()); TwAddSeparator(bar, NULL, def); sprintf(def, "%s/%s label='%s' group=DemEditor ", TwGetBarName(bar), n.c_str(), n.c_str()); TwDefine(def); } } for (int i = 0; i < e->getEditorCount(); i++) { sprintf(name, "DemEditor%d", i); sprintf(def, " group=%s label='%s' help='Activate or Deactivate the selected Editor' ", e->getEditor(i)->getName().c_str(), e->getEditor(i)->getName().c_str()); TwAddVarCB(bar, name, TW_TYPE_BOOLCPP, SetDemEditorStateCallback, GetDemEditorStateCallback, e->getEditor(i), def); } delete[] editModes; }
void InterfaceGl::addParam( const std::string &name, const std::vector<std::string> &enumNames, int *param, const std::string &optionsStr, bool readOnly ) { TwEnumVal *ev = new TwEnumVal[enumNames.size()]; for( size_t v = 0; v < enumNames.size(); ++v ) { ev[v].Value = v; ev[v].Label = const_cast<char*>( enumNames[v].c_str() ); } TwType evType = TwDefineEnum( (name + "EnumType").c_str(), ev, enumNames.size() ); if( readOnly ) TwAddVarRO( mBar.get(), name.c_str(), evType, param, optionsStr.c_str() ); else TwAddVarRW( mBar.get(), name.c_str(), evType, param, optionsStr.c_str() ); delete [] ev; }
void InitDialogs() { settings_bar = TwNewBar("Settings"); TwDefine("Settings color='72 115 1' alpha=32 text=light valueswidth=100 iconified=true resizable=false"); int barSize[2] = {400, 200}; TwSetParam(settings_bar, nullptr, "size", TW_PARAM_INT32, 2, barSize); TwAddVarRW(settings_bar, "Focus Distance", TW_TYPE_FLOAT, &g_focal_distance, "group='Depth of Field' min=0 max=1 step=0.0025 keydecr=o keyincr=p"); TwAddVarRW(settings_bar, "Focus Range", TW_TYPE_FLOAT, &g_focal_range, "group='Depth of Field' min=0.0 max=0.5 step=0.0025 keydecr=k keyincr=l"); TwAddVarRW(settings_bar, "Aperture", TW_TYPE_FLOAT, &g_focal_aperture, "group='Depth of Field' min=0.01 max=1.00 step=0.01 keydecr=n keyincr=m"); { TwEnumVal enumModeTypeEV[] = { { VIEW_MODE_DOF, "SAT Blur" }, { VIEW_MODE_BLUR_SIZE, "Blur Size" } }; TwType enumModeType = TwDefineEnum("RenderMode", enumModeTypeEV, sizeof(enumModeTypeEV) / sizeof(enumModeTypeEV[0])); TwAddVarRW(settings_bar, "View Mode", enumModeType, &g_view_mode, "keyIncr=v keyDecr=V"); } }
GLWidget::GLWidget(QWidget *parent) : QGLWidget(QGLFormat(QGL::SampleBuffers), parent) { filename=0; hasToPick=false; setWindowTitle(tr("Hello GL")); bar = TwNewBar("TweakBar"); TwCopyCDStringToClientFunc (CopyCDStringToClient); TwAddVarRW(bar,"Input",TW_TYPE_CDSTRING, &filename," label='Filepath' group=SetMesh help=` Name of the file to load` "); TwAddButton(bar,"Load from file",loadMesh,0, " label='Load Mesh' group=SetMesh help=`load the mesh` "); TwAddButton(bar,"Use tetrahedron",loadTetrahedron,0, " label='Make Tetrahedron' group=SetMesh help=`use tetrahedron.` "); // ShapeEV associates Shape enum values with labels that will be displayed instead of enum values TwEnumVal drawmodes[6] = { {GLW::DMSmooth, "Smooth"}, {GLW::DMPoints, "Per Points"}, {GLW::DMWire, "Wire"}, {GLW::DMFlatWire, "FlatWire"},{GLW::DMHidden, "Hidden"},{GLW::DMFlat, "Flat"}}; // Create a type for the enum shapeEV TwType drawMode = TwDefineEnum("DrawMode", drawmodes, 6); // add 'g_CurrentShape' to 'bar': this is a variable of type ShapeType. Its key shortcuts are [<] and [>]. TwAddVarRW(bar, "Draw Mode", drawMode, &drawmode, " keyIncr='<' keyDecr='>' help='Change draw mode.' "); }
void EnumSetting::Initialize(TwBar* tweakBar_, const char* name_, const char* group_, const char* label_, const char* helpText_, uint32 initialVal, uint32 numValues_, const char* const* valueLabels) { val = std::min(initialVal, numValues - 1); numValues = numValues_; // Register an enum type std::vector<TwEnumVal> enumValues(numValues); for(uint32 i = 0; i < numValues; ++i) { enumValues[i].Value = i; enumValues[i].Label = valueLabels[i]; } TwType twType = TwDefineEnum(name_, enumValues.data(), numValues); TwCall(twType); Setting::Initialize(tweakBar_, SettingType::Enum, &val, name_, group_, label_, helpText_, twType); }
ofxTweakbarList* ofxTweakbarList::create() { enum_values = new TwEnumVal[options.size()]; for(int i = 0; i < options.size(); ++i) { enum_values[i] = options.at(i); } enum_type = TwDefineEnum( getName() ,enum_values ,options.size() ); TwAddVarRW( getBar()->getBar() ,getName() ,enum_type ,value ,def_string ); return this; }
void InitDialogs() { settings_bar = TwNewBar("Settings"); TwDefine("Settings color='19 25 19' alpha=128 text=light size='500 250' iconified=true valueswidth=200"); TwAddVarRW(settings_bar, "Pause Animation", TW_TYPE_BOOLCPP, &g_sailSpeedPaused, "group='' key=SPACE"); TwAddVarRW(settings_bar, "Sail Speed", TW_TYPE_FLOAT, &g_sailSpeed, "group='' min=0 max=700 step=1.0 keydecr=o keyincr=p"); TwAddVarRW(settings_bar, "Exposure Fraction", TW_TYPE_FLOAT, &g_Exposure, "group='Reconstruction' min=0.0 max=1.0 step=0.001 keydecr=k keyincr=l"); TwAddVarRW(settings_bar, "Max Blur Radius", TW_TYPE_UINT32, &g_K, "group='Reconstruction' min=1 max=20 step=1 keydecr=n keyincr=m"); TwAddVarRW(settings_bar, "Reconstruction Samples", TW_TYPE_UINT32, &g_S, "group='Reconstruction' min=1 max=20 step=2 keydecr=, keyincr=."); { TwEnumVal enumModeTypeEV[] = { { VIEW_MODE_COLOR_ONLY, "Color Only" }, { VIEW_MODE_DEPTH_ONLY, "Depth Only" }, { VIEW_MODE_VELOCITY, "Velocity" }, { VIEW_MODE_VELOCITY_TILE_MAX, "Velocity TileMax" }, { VIEW_MODE_VELOCITY_NEIGHBOR_MAX, "Velocity NeighborMax" }, { VIEW_MODE_FINAL, "Gather (final result)" } }; TwType enumModeType = TwDefineEnum("RenderMode", enumModeTypeEV, sizeof(enumModeTypeEV) / sizeof(enumModeTypeEV[0])); TwAddVarRW(settings_bar, "View Mode", enumModeType, &g_view_mode, "keyIncr=v keyDecr=V"); } }
void TweakResource::updateBar(TwBar *bar) { clearData(); const TiXmlNode *n = e->FirstChild(); while (n != NULL) { const TiXmlElement *f = n->ToElement(); if (f == NULL) { n = n->NextSibling(); continue; } if (strcmp(f->Value(), "enum") == 0) { EnumData *enumVar = new EnumData(manager); string files = string(f->Attribute("files")) + ","; string::size_type start = 0; string::size_type index; while ((index = files.find(',', start)) != string::npos) { enumVar->files.push_back(files.substr(start, index - start)); start = index + 1; } datas.push_back(enumVar); TwEnumVal enumValues[256]; int nbValues = 0; const TiXmlNode *m = f->FirstChild(); while (m != NULL) { const TiXmlElement *g = m->ToElement(); enumValues[nbValues].Value = nbValues; enumValues[nbValues].Label = g->Attribute("label"); vector<string> values; if (g->FirstChild() != NULL && strcmp(g->FirstChild()->Value(), "a") == 0) { const TiXmlNode *l = g->FirstChild(); while (l != NULL) { values.push_back(l->ToElement()->GetText()); l = l->NextSibling(); } } else { values.push_back(string(g->GetText())); } enumVar->replacements.push_back(values); m = m->NextSibling(); nbValues++; } if (nbValues == 2 && strcmp(enumValues[0].Label, "OFF") == 0 && strcmp(enumValues[1].Label, "ON") == 0) { TwAddVarCB(bar, f->Attribute("label"), TW_TYPE_BOOL32, SetEnumCallback, GetEnumCallback, enumVar, NULL); } else { ostringstream enumName; enumName << "enum" << TWBAR_COUNTER++; TwType enumType = TwDefineEnum(enumName.str().c_str(), enumValues, nbValues); TwAddVarCB(bar, f->Attribute("label"), enumType, SetEnumCallback, GetEnumCallback, enumVar, NULL); } setParam(bar, f, "key"); setParam(bar, f, "group"); setParam(bar, f, "help"); } if (strcmp(f->Value(), "bool") == 0) { UniformData *var = new UniformData(manager, f->Attribute("path"), 1); datas.push_back(var); TwAddVarCB(bar, f->Attribute("label"), TW_TYPE_BOOLCPP, SetUniformCallback, GetUniformCallback, var, NULL); setParam(bar, f, "group"); setParam(bar, f, "help"); } if (strcmp(f->Value(), "float") == 0) { UniformData *var = new UniformData(manager, f->Attribute("path"), 1); datas.push_back(var); TwAddVarCB(bar, f->Attribute("label"), TW_TYPE_FLOAT, SetUniformCallback, GetUniformCallback, var, NULL); setParam(bar, f, "keyincr"); setParam(bar, f, "keydecr"); setParam(bar, f, "min"); setParam(bar, f, "max"); setParam(bar, f, "step"); setParam(bar, f, "group"); setParam(bar, f, "help"); } if (strcmp(f->Value(), "color") == 0) { UniformData *var = new UniformData(manager, f->Attribute("path"), 3); datas.push_back(var); TwAddVarCB(bar, f->Attribute("label"), TW_TYPE_COLOR3F, SetUniformCallback, GetUniformCallback, var, NULL); setParam(bar, f, "group"); setParam(bar, f, "help"); } if (strcmp(f->Value(), "direction") == 0) { UniformData *var = new UniformData(manager, f->Attribute("path"), 3); datas.push_back(var); TwAddVarCB(bar, f->Attribute("label"), TW_TYPE_DIR3F, SetUniformCallback, GetUniformCallback, var, NULL); setParam(bar, f, "group"); setParam(bar, f, "help"); } n = n->NextSibling(); } }
int main(void) { Context ctx; // Create a GLFW window glfwSetErrorCallback(errorCallback); glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); ctx.width = 800; ctx.height = 600; ctx.aspect = float(ctx.width) / float(ctx.height); ctx.window = glfwCreateWindow(ctx.width, ctx.height, "Model viewer", nullptr, nullptr); glfwMakeContextCurrent(ctx.window); glfwSetWindowUserPointer(ctx.window, &ctx); glfwSetKeyCallback(ctx.window, keyCallback); glfwSetMouseButtonCallback(ctx.window, mouseButtonCallback); glfwSetCursorPosCallback(ctx.window, cursorPosCallback); glfwSetScrollCallback(ctx.window, scrollCallback); glfwSetFramebufferSizeCallback(ctx.window, resizeCallback); // Load OpenGL functions glewExperimental = true; GLenum status = glewInit(); if (status != GLEW_OK) { std::cerr << "Error: " << glewGetErrorString(status) << std::endl; std::exit(EXIT_FAILURE); } std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl; // Initialize AntTweakBar (if enabled) #ifdef WITH_TWEAKBAR TwInit(TW_OPENGL_CORE, nullptr); TwWindowSize(ctx.width, ctx.height); TwBar *tweakbar = TwNewBar("Settings"); TwDefine("Settings size='300 500'"); TwDefine("Settings refresh=0.1"); TwDefine("Settings valueswidth=fit"); TwEnumVal lensEV[] = { {ORTOGRAPHIC, "Orthographic"}, {PERSPECTIVE, "Perspective"} }; TwType lensType = TwDefineEnum("LensType", lensEV, 2); TwAddVarRW(tweakbar, "Lens / Projection", lensType, &ctx.lensType, NULL); TwAddSeparator(tweakbar, NULL, NULL); TwAddVarRW(tweakbar, "Background color", TW_TYPE_COLOR3F, &ctx.background_color[0], "colormode=hls"); TwAddSeparator(tweakbar, NULL, NULL); TwAddVarRW(tweakbar, "Ambient light color", TW_TYPE_COLOR3F, &ctx.ambient_light[0], "colormode=hls"); TwAddVarRW(tweakbar, "Point light color", TW_TYPE_COLOR3F, &ctx.light_color[0], "colormode=hls"); TwAddVarRW(tweakbar, "Point light position", TW_TYPE_DIR3F, &ctx.light_position[0], NULL); //TwAddVarRW(tweakbar, "Point light x", TW_TYPE_FLOAT, &ctx.light_position[0], NULL); //TwAddVarRW(tweakbar, "Point light y", TW_TYPE_FLOAT, &ctx.light_position[1], NULL); //TwAddVarRW(tweakbar, "Point light z", TW_TYPE_FLOAT, &ctx.light_position[2], NULL); TwAddSeparator(tweakbar, NULL, NULL); TwAddVarRW(tweakbar, "Material diffuse color", TW_TYPE_COLOR3F, &ctx.diffuse_color[0], "colormode=hls"); TwAddVarRW(tweakbar, "Material specular color", TW_TYPE_COLOR3F, &ctx.specular_color[0], "colormode=hls"); TwAddVarRW(tweakbar, "Material specular power", TW_TYPE_FLOAT, &ctx.specular_power, NULL); TwAddSeparator(tweakbar, NULL, NULL); TwEnumVal colorModeEV[] = { {NORMAL_AS_RGB, "Normal as RGB"}, {BLINN_PHONG, "Blinn-Phong"}, {REFLECTION, "Reflection"} }; TwType colorModeType = TwDefineEnum("ColorMode", colorModeEV, ColorMode::SIZE); TwAddVarRW(tweakbar, "Color mode", colorModeType, &ctx.color_mode, NULL); TwAddVarRW(tweakbar, "Use gamma correction", TW_TYPE_BOOL32, &ctx.use_gamma_correction, NULL); TwAddVarRW(tweakbar, "Use color inversion", TW_TYPE_BOOL32, &ctx.use_color_inversion, NULL); TwAddSeparator(tweakbar, NULL, NULL); TwAddVarRW(tweakbar, "Ambient weight", TW_TYPE_FLOAT, &ctx.ambient_weight, NULL); TwAddVarRW(tweakbar, "Diffuse weight", TW_TYPE_FLOAT, &ctx.diffuse_weight, NULL); TwAddVarRW(tweakbar, "Specular weight", TW_TYPE_FLOAT, &ctx.specular_weight, NULL); #endif // WITH_TWEAKBAR // Initialize rendering glGenVertexArrays(1, &ctx.defaultVAO); glBindVertexArray(ctx.defaultVAO); glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); init(ctx); // Start rendering loop while (!glfwWindowShouldClose(ctx.window)) { glfwPollEvents(); ctx.elapsed_time = glfwGetTime(); display(ctx); #ifdef WITH_TWEAKBAR TwDraw(); #endif // WITH_TWEAKBAR glfwSwapBuffers(ctx.window); } // Shutdown #ifdef WITH_TWEAKBAR TwTerminate(); #endif // WITH_TWEAKBAR glfwDestroyWindow(ctx.window); glfwTerminate(); std::exit(EXIT_SUCCESS); }
// Main int main(int argc, char *argv[]) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH ); glutInitWindowSize( 800, 600 ); glutCreateWindow( "Font rendering advanced tweaking" ); glutCreateMenu( NULL ); glutDisplayFunc( display ); glutReshapeFunc( reshape ); atexit( terminate ); TwInit( TW_OPENGL, NULL ); glutMouseFunc( (GLUTmousebuttonfun)TwEventMouseButtonGLUT ); glutMotionFunc( (GLUTmousemotionfun)TwEventMouseMotionGLUT ); glutPassiveMotionFunc( (GLUTmousemotionfun)TwEventMouseMotionGLUT ); glutKeyboardFunc( (GLUTkeyboardfun)TwEventKeyboardGLUT ); glutSpecialFunc( (GLUTspecialfun)TwEventSpecialGLUT ); TwGLUTModifiersFunc( glutGetModifiers ); // Create a new tweak bar bar = TwNewBar("TweakBar"); TwDefine("GLOBAL " "help = 'This example shows how to tune all font parameters.' "); TwDefine("TweakBar " "size = '280 400' " "position = '500 20' " "color = '127 127 127' " "alpha = 240 " "label = 'Parameters' " "resizable = True " "fontresizable = True " "iconifiable = True "); { TwEnumVal familyEV[NUM_FONTS] = { {VERA, "Vera"}, {VERA_MONO, "Vera Mono"}, {GEORGIA, "Georgia"}, {TIMES, "Times"}, {VERDANA, "Verdana"}, {TAHOMA, "Tahoma"}, {ARIAL, "Arial"} }; TwType family_type = TwDefineEnum("Family", familyEV, NUM_FONTS); TwAddVarCB(bar, "Family", family_type, set_family, get_family, NULL, "label = 'Family' " "group = 'Font' " "help = ' ' "); } TwAddVarCB(bar, "Size", TW_TYPE_FLOAT, set_size, get_size, NULL, "label = 'Size' " "group = 'Font' " "min = 6.0 " "max = 24.0 " "step = 0.05 " "help = ' ' "); TwAddVarCB(bar, "LCD filtering", TW_TYPE_BOOL32, set_lcd_filtering, get_lcd_filtering, NULL, "label = 'LCD filtering' " "group = 'Font' " "help = ' ' "); // Rendering TwAddVarCB(bar, "Kerning", TW_TYPE_BOOL32, set_kerning, get_kerning, NULL, "label = 'Kerning' " "group = 'Rendering' " "help = ' ' "); TwAddVarCB(bar, "Hinting", TW_TYPE_BOOL32, set_hinting, get_hinting, NULL, "label = 'Hinting' " "group = 'Rendering' " "help = ' ' "); // Color TwAddVarCB(bar, "Invert", TW_TYPE_BOOL32, set_invert, get_invert, NULL, "label = 'Invert' " "group = 'Color' " "help = ' ' "); // Glyph TwAddVarCB(bar, "Width", TW_TYPE_FLOAT, set_width, get_width, NULL, "label = 'Width' " "group = 'Glyph' " "min = 0.75 " "max = 1.25 " "step = 0.01 " "help = ' ' "); TwAddVarCB(bar, "Interval", TW_TYPE_FLOAT, set_interval, get_interval, NULL, "label = 'Spacing' " "group = 'Glyph' " "min = -0.2 " "max = 0.2 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Faux italic", TW_TYPE_FLOAT, set_faux_italic, get_faux_italic, NULL, "label = 'Faux italic' " "group = 'Glyph' " "min = -30.0 " "max = 30.0 " "step = 0.1 " "help = ' ' "); // Energy distribution TwAddVarCB(bar, "Primary", TW_TYPE_FLOAT, set_primary, get_primary, NULL, "label = 'Primary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Secondary", TW_TYPE_FLOAT, set_secondary, get_secondary, NULL, "label = 'Secondy weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Tertiary", TW_TYPE_FLOAT, set_tertiary, get_tertiary, NULL, "label = 'Tertiary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddSeparator(bar, "", "group = 'Energy distribution' " ); TwAddVarCB(bar, "Gamma", TW_TYPE_FLOAT, set_gamma, get_gamma, NULL, "label = 'Gamma correction' " "group = 'Energy distribution' " "min = 0.50 " "max = 2.5 " "step = 0.01 " "help = ' ' "); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Reset", (TwButtonCallback) reset, NULL, "help='Reset all parameters to default values.'"); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Quit", (TwButtonCallback) quit, NULL, "help='Quit.'"); atlas_gray = texture_atlas_new( 512, 256, 1 ); atlas_rgb = texture_atlas_new( 512, 256, 3 ); buffer = vertex_buffer_new( "v3f:t2f:c4f:1g1f" ); reset(); // Create the shader program = shader_load( "shaders/agg.vert", "shaders/agg.frag" ); texture_location = glGetUniformLocation( program, "texture" ); pixel_location = glGetUniformLocation( program, "pixel" ); gamma_location = glGetUniformLocation( program, "gamma" ); primary_location = glGetUniformLocation( program, "primary" ); secondary_location = glGetUniformLocation( program, "secondary" ); tertiary_location = glGetUniformLocation( program, "tertiary" ); //glEnable(GL_FRAMEBUFFER_SRGB); glutTimerFunc( 1000.0/60.0, timer, 60 ); glutMainLoop(); return EXIT_SUCCESS; }
int main ( int argc, char *argv[] ) { #pragma region [-- FreeGLUT --] glutInit (&argc, argv); glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( Width, Heigth ); main_window = glutCreateWindow ("Shaders"); #pragma endregion #pragma region [-- GLEW --] // Inicializacion de GLEW GLenum glew_err = glewInit (); if ( GLEW_OK != glew_err ){ cout << "No es posible inicializar GLEW\n"; return 1; } cout << "Usando GLEW Version: " << glewGetString ( GLEW_VERSION ) << "\n\n"; #pragma endregion initShaders(); initLights(); #pragma region [-- AntTweakBar --] TwBar *bar; // Pointer to the tweak bar TwBar *barLights; // Initialize AntTweakBar TwInit(TW_OPENGL, NULL); glutMouseFunc(mouseClick); // Set GLUT event callbacks // - Directly redirect GLUT mouse button events to AntTweakBar //glutMouseFunc((GLUTmousebuttonfun)TwEventMouseButtonGLUT); // - Directly redirect GLUT mouse motion events to AntTweakBar glutMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT); // - Directly redirect GLUT mouse "passive" motion events to AntTweakBar (same as MouseMotion) glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT); // - Directly redirect GLUT key events to AntTweakBar glutKeyboardFunc((GLUTkeyboardfun)TwEventKeyboardGLUT); // - Directly redirect GLUT special key events to AntTweakBar glutSpecialFunc((GLUTspecialfun)TwEventSpecialGLUT); // - Send 'glutGetModifers' function pointer to AntTweakBar; // required because the GLUT key event functions do not report key modifiers states. TwGLUTModifiersFunc(glutGetModifiers); bar = TwNewBar("Objetos"); TwDefine(" Objetos size='225 350' color='25 255 0' "); // change default tweak bar size and color 96 216 224 // Define the required callback function to copy a std::string (see TwCopyStdStringToClientFunc documentation) TwCopyStdStringToClientFunc(CopyStdStringToClient); TwAddVarRW(bar, "Cargar figura", TW_TYPE_STDSTRING, &direccion_carga, " label='direccion' group=Cargar help='Define a title for the new tweak bar.' "); // Add a button to create a new bar using the title TwAddButton(bar, "NewBarCreate", Cargar, &direccion_carga, " label='--> Create' group=Cargar key=c help='Create a new tweak bar.' "); TwAddVarRW(bar, "ObjRotation1", TW_TYPE_QUAT4F, &g_Rotation, " label='Object rotation' opened=true help='Change the object orientation.' "); // Add 'g_Zoom' to 'bar': this is a modifable (RW) variable of type TW_TYPE_FLOAT. Its key shortcuts are [m] and [M]. TwAddVarRW(bar, "Zoom", TW_TYPE_FLOAT, &g_Zoom, " min=0.01 max=2.5 step=0.01 keyIncr=m keyDecr=M help='Scale the object (1=original size).' "); // Add 'g_Zoom' to 'bar': this is a modifable (RW) variable of type TW_TYPE_FLOAT. Its key shortcuts are [m] and [M]. TwAddVarRW(bar, "Shinnes", TW_TYPE_FLOAT, &shinnes, " min=0.00 max=200 step=0.1 keyIncr=m keyDecr=M help='Scale the object (1=original size).' "); // Add 'Translate' to 'bar': this is a modifable (RW) variable of type TW_TYPE_FLOAT. Its key shortcuts are [xyz] and [xyz]. TwAddVarRW(bar, "TranslateX", TW_TYPE_FLOAT, &Translation[0], " min=-20.0 max=20 step=0.01 keyIncr=x keyDecr=X help='Scale the object (1=original size).' group='Translation' "); TwAddVarRW(bar, "TranslateY", TW_TYPE_FLOAT, &Translation[1], " min=-20.0 max=20 step=0.01 keyIncr=y keyDecr=Y help='Scale the object (1=original size).' group='Translation' "); TwAddVarRW(bar, "TranslateZ", TW_TYPE_FLOAT, &Translation[2], " min=-20.0 max=20 step=0.01 keyIncr=z keyDecr=Z help='Scale the object (1=original size).' group='Translation' "); barLights = TwNewBar("Luces"); TwDefine(" Luces size='225 350' position='580 16' color='25 255 0' "); // change default tweak bar size and color 96 216 224 { // ShapeEV associates Shape enum values with labels that will be displayed instead of enum values TwEnumVal lightType[3] = { {DIRECTIONALLIGHT, "Direccional"}, {SPOTLIGHT, "Reflector"}, {POINTLIGHT, "Puntual"} }; // Create a type for the enum lightType TwType shapeType = TwDefineEnum("lightType", lightType, 3); // add 'g_CurrentShape' to 'bar': this is a variable of type ShapeType. Its key shortcuts are [<] and [>]. TwAddVarRW(barLights, "Shape", shapeType, &g_light->status, " keyIncr='<' keyDecr='>' help='Change object shape.' "); } // Add 'g_LightDirection' to 'bar': this is a variable of type TW_TYPE_DIR3F which defines the light direction TwAddVarRW(barLights, "LightDir", TW_TYPE_DIR3F, &g_light->spotDirection, " label='Light direction' opened=true help='Change the light direction.' "); // Add 'g_MatAmbient' to 'bar': this is a variable of type TW_TYPE_COLOR3F (3 floats color, alpha is ignored) // and is inserted into a group named 'Material'. TwAddVarRW(barLights, "Ambient", TW_TYPE_COLOR3F, &g_light->ambient, " group='Material' "); // Add 'g_MatDiffuse' to 'bar': this is a variable of type TW_TYPE_COLOR3F (3 floats color, alpha is ignored) // and is inserted into group 'Material'. TwAddVarRW(barLights, "Diffuse", TW_TYPE_COLOR3F, &g_light->diffuse, " group='Material' "); // Add 'g_MatDiffuse' to 'bar': this is a variable of type TW_TYPE_COLOR3F (3 floats color, alpha is ignored) // and is inserted into group 'Material'. TwAddVarRW(barLights, "specular", TW_TYPE_COLOR3F, &g_light->specular, " group='Material' "); TwAddVarRW(barLights, "TranslateX", TW_TYPE_FLOAT, &g_light->position.x, " min=-20.0 max=20 step=0.01 keyIncr=x keyDecr=X help='Scale the object (1=original size).' group='Translation' "); TwAddVarRW(barLights, "Translatey", TW_TYPE_FLOAT, &g_light->position.y, " min=-20.0 max=20 step=0.01 keyIncr=y keyDecr=Y help='Scale the object (1=original size).' group='Translation' "); TwAddVarRW(barLights, "Translatez", TW_TYPE_FLOAT, &g_light->position.z, " min=-20.0 max=20 step=0.01 keyIncr=z keyDecr=Z help='Scale the object (1=original size).' group='Translation' "); TwAddVarRW(barLights, "spotExponent", TW_TYPE_FLOAT, &g_light->spotExponent, " min=0.0 max=10 step=1.0 help='Scale the object (1=original size).' "); TwAddVarRW(barLights, "spotCutoff", TW_TYPE_FLOAT, &g_light->spotCutoff, " min=0.0 max=60 step=1.0 help='Scale the object (1=original size).' "); TwAddVarRW(barLights, "constantAttenuation", TW_TYPE_FLOAT, &g_light->constantAttenuation, " min=0.0 step=1.0 help='Scale the object (1=original size).' "); TwAddVarRW(barLights, "linearAttenuation", TW_TYPE_FLOAT, &g_light->linearAttenuation, " min=0.0 step=1.0 help='Scale the object (1=original size).' "); TwAddVarRW(barLights, "quadraticAttenuation", TW_TYPE_FLOAT, &g_light->quadraticAttenuation, " min=0.0 max=60 step=1.0 help='Scale the object (1=original size).' "); #pragma endregion #pragma region [-- Callbacks --] glutDisplayFunc(Display); glutReshapeFunc(Reshape); #pragma endregion glEnable(GL_DEPTH_TEST); glutMainLoop (); return 0; }
// ------------------------------------------------------------------- init --- void init( GLFWwindow* window ) { // Create a new tweak bar bar = TwNewBar("TweakBar"); TwDefine("GLOBAL " "help = 'This example shows how to tune all font parameters.' "); TwDefine("TweakBar " "size = '280 400' " "position = '500 20' " "color = '127 127 127' " "alpha = 240 " "label = 'Parameters' " "resizable = True " "fontresizable = True " "iconifiable = True "); { TwEnumVal familyEV[NUM_FONTS] = { {VERA, "Vera"}, {VERA_MONO, "Vera Mono"}, {LUCKIEST_GUY, "Luckiest Guy"}, {SOURCE_SANS, "Source Sans Pro"}, {SOURCE_CODE, "Source Code Pro"}, {OLD_STANDARD, "Old Standard TT"}, {LOBSTER, "Lobster"} }; TwType family_type = TwDefineEnum("Family", familyEV, NUM_FONTS); TwAddVarCB(bar, "Family", family_type, set_int, get_int, &p_family, "label = 'Family' " "group = 'Font' " "help = ' ' "); } TwAddVarCB(bar, "Size", TW_TYPE_FLOAT, set_float, get_float, &p_size, "label = 'Size' " "group = 'Font' " "min = 6.0 " "max = 24.0 " "step = 0.05 " "help = ' ' "); TwAddVarCB(bar, "LCD filtering", TW_TYPE_BOOL32, set_lcd_filtering, get_lcd_filtering, NULL, "label = 'LCD filtering' " "group = 'Font' " "help = ' ' "); // Rendering TwAddVarCB(bar, "Kerning", TW_TYPE_BOOL32, set_int, get_int, &p_kerning, "label = 'Kerning' " "group = 'Rendering' " "help = ' ' "); TwAddVarCB(bar, "Hinting", TW_TYPE_BOOL32, set_int, get_int, &p_hinting, "label = 'Hinting' " "group = 'Rendering' " "help = ' ' "); // Color TwAddVarCB(bar, "Invert", TW_TYPE_BOOL32, set_int, get_int, &p_invert, "label = 'Invert' " "group = 'Color' " "help = ' ' "); // Glyph TwAddVarCB(bar, "Width", TW_TYPE_FLOAT, set_float, get_float, &p_width, "label = 'Width' " "group = 'Glyph' " "min = 0.75 " "max = 1.25 " "step = 0.01 " "help = ' ' "); TwAddVarCB(bar, "Interval", TW_TYPE_FLOAT, set_float, get_float, &p_interval, "label = 'Spacing' " "group = 'Glyph' " "min = -0.2 " "max = 0.2 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Faux italic", TW_TYPE_FLOAT, set_float, get_float, &p_faux_italic, "label = 'Faux italic' " "group = 'Glyph' " "min = -30.0 " "max = 30.0 " "step = 0.1 " "help = ' ' "); // Energy distribution TwAddVarCB(bar, "Primary", TW_TYPE_FLOAT, set_float, get_float, &p_primary, "label = 'Primary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Secondary", TW_TYPE_FLOAT, set_float, get_float, &p_secondary, "label = 'Secondy weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Tertiary", TW_TYPE_FLOAT, set_float, get_float, &p_tertiary, "label = 'Tertiary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddSeparator(bar, "", "group = 'Energy distribution' " ); TwAddVarCB(bar, "Gamma", TW_TYPE_FLOAT, set_float, get_float, &p_gamma, "label = 'Gamma correction' " "group = 'Energy distribution' " "min = 0.50 " "max = 2.5 " "step = 0.01 " "help = ' ' "); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Reset", (TwButtonCallback) reset, NULL, "help='Reset all parameters to default values.'"); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Quit", (TwButtonCallback) quit, window, "help='Quit.'"); text_shader = shader_load( "shaders/text.vert", "shaders/text.frag" ); font_manager_a = font_manager_new( 512, 512, LCD_FILTERING_OFF ); font_manager_rgb = font_manager_new( 512, 512, LCD_FILTERING_ON ); font_manager = font_manager_rgb; text_buffer = text_buffer_new( ); glGenTextures( 1, &font_manager_a->atlas->id ); glBindTexture( GL_TEXTURE_2D, font_manager_a->atlas->id ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glGenTextures( 1, &font_manager_rgb->atlas->id ); glBindTexture( GL_TEXTURE_2D, font_manager_rgb->atlas->id ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); reset(); mat4_set_identity( &projection ); mat4_set_identity( &model ); mat4_set_identity( &view ); }
void AtmosphereSample::Initialize(IRenderDevice *pDevice, IDeviceContext **ppContexts, Uint32 NumDeferredCtx, ISwapChain *pSwapChain) { const auto& deviceCaps = pDevice->GetDeviceCaps(); if(!deviceCaps.bComputeShadersSupported) { throw std::runtime_error("Compute shaders are required to run this sample"); } SampleBase::Initialize(pDevice, ppContexts, NumDeferredCtx, pSwapChain); m_bIsDXDevice = deviceCaps.DevType == DeviceType::D3D11 || deviceCaps.DevType == DeviceType::D3D12; if( pDevice->GetDeviceCaps().DevType == DeviceType::OpenGLES ) { m_uiShadowMapResolution = 512; m_PPAttribs.m_iFirstCascade = 2; m_PPAttribs.m_uiSingleScatteringMode = SINGLE_SCTR_MODE_LUT; m_TerrainRenderParams.m_iNumShadowCascades = 4; m_TerrainRenderParams.m_iNumRings = 10; m_TerrainRenderParams.m_TexturingMode = RenderingParams::TM_MATERIAL_MASK; } m_f4CustomRlghBeta = m_PPAttribs.m_f4CustomRlghBeta; m_f4CustomMieBeta = m_PPAttribs.m_f4CustomMieBeta; m_strRawDEMDataFile = "Terrain\\HeightMap.tif"; m_strMtrlMaskFile = "Terrain\\Mask.png"; m_strTileTexPaths[0] = "Terrain\\Tiles\\gravel_DM.dds"; m_strTileTexPaths[1] = "Terrain\\Tiles\\grass_DM.dds"; m_strTileTexPaths[2] = "Terrain\\Tiles\\cliff_DM.dds"; m_strTileTexPaths[3] = "Terrain\\Tiles\\snow_DM.dds"; m_strTileTexPaths[4] = "Terrain\\Tiles\\grassDark_DM.dds"; m_strNormalMapTexPaths[0] = "Terrain\\Tiles\\gravel_NM.dds"; m_strNormalMapTexPaths[1] = "Terrain\\Tiles\\grass_NM.dds"; m_strNormalMapTexPaths[2] = "Terrain\\Tiles\\cliff_NM.dds"; m_strNormalMapTexPaths[3] = "Terrain\\Tiles\\Snow_NM.jpg"; m_strNormalMapTexPaths[4] = "Terrain\\Tiles\\grass_NM.dds"; // Create data source try { m_pElevDataSource.reset( new ElevationDataSource(m_strRawDEMDataFile.c_str()) ); m_pElevDataSource->SetOffsets(m_TerrainRenderParams.m_iColOffset, m_TerrainRenderParams.m_iRowOffset); m_fMinElevation = m_pElevDataSource->GetGlobalMinElevation() * m_TerrainRenderParams.m_TerrainAttribs.m_fElevationScale; m_fMaxElevation = m_pElevDataSource->GetGlobalMaxElevation() * m_TerrainRenderParams.m_TerrainAttribs.m_fElevationScale; } catch(const std::exception &) { LOG_ERROR("Failed to create elevation data source"); return; } const Char *strTileTexPaths[EarthHemsiphere::NUM_TILE_TEXTURES], *strNormalMapPaths[EarthHemsiphere::NUM_TILE_TEXTURES]; for(int iTile=0; iTile < _countof(strTileTexPaths); ++iTile ) { strTileTexPaths[iTile] = m_strTileTexPaths[iTile].c_str(); strNormalMapPaths[iTile] = m_strNormalMapTexPaths[iTile].c_str(); } CreateUniformBuffer( pDevice, sizeof( CameraAttribs ), "Camera Attribs CB", &m_pcbCameraAttribs ); CreateUniformBuffer( pDevice, sizeof( LightAttribs ), "Light Attribs CB", &m_pcbLightAttribs ); const auto &SCDesc = pSwapChain->GetDesc(); m_pLightSctrPP.reset( new LightSctrPostProcess(m_pDevice, m_pImmediateContext, SCDesc.ColorBufferFormat, SCDesc.DepthBufferFormat, TEX_FORMAT_R11G11B10_FLOAT) ); auto *pcMediaScatteringParams = m_pLightSctrPP->GetMediaAttribsCB(); m_EarthHemisphere.Create(m_pElevDataSource.get(), m_TerrainRenderParams, m_pDevice, m_pImmediateContext, m_strMtrlMaskFile.c_str(), strTileTexPaths, strNormalMapPaths, m_pcbCameraAttribs, m_pcbLightAttribs, pcMediaScatteringParams ); CreateShadowMap(); // Create a tweak bar TwBar *bar = TwNewBar("Settings"); TwDefine(" GLOBAL fontsize=3 "); int barSize[2] = {300, 900}; #ifdef ANDROID barSize[0] = 800; barSize[1] = 1000; #endif TwSetParam(bar, NULL, "size", TW_PARAM_INT32, 2, barSize); // Add variables to the tweak bar #if 0 float3 axis(-1, 1, 0); m_SpongeRotation = RotationFromAxisAngle(axis, FLOAT_PI/4); TwAddVarRW(bar, "Rotation", TW_TYPE_QUAT4F, &m_SpongeRotation, "opened=true axisz=-z group=Sponge"); #endif TwAddVarRW(bar, "FPS", TW_TYPE_FLOAT, &m_fFPS, "readonly=true"); TwAddVarRW(bar, "Light direction", TW_TYPE_DIR3F, &m_f3LightDir, "opened=true axisz=-z showval=false"); TwAddVarRW(bar, "Camera direction", TW_TYPE_DIR3F, &m_f3CameraDir, "opened=true axisz=-z showval=false"); TwAddVarRW( bar, "Camera altitude", TW_TYPE_FLOAT, &m_f3CameraPos.y, "min=2000 max=100000 step=100 keyincr=PGUP keydecr=PGDOWN" ); // Shadows { // Define a new enum type for the tweak bar TwEnumVal ShadowMapRes[] = // array used to describe the shadow map resolution { { 512, "512" }, { 1024, "1024" }, { 2048, "2048" }, { 4096, "4096" } }; TwType modeType = TwDefineEnum( "Shadow Map Resolution", ShadowMapRes, _countof( ShadowMapRes ) ); // create a new TwType associated to the enum defined by the ShadowMapRes array TwAddVarCB( bar, "Shadow map resolution", modeType, SetShadowMapResCB, GetShadowMapResCB, this, "group=Shadows" ); TwAddVarRW( bar, "Show cascades", TW_TYPE_BOOLCPP, &m_bVisualizeCascades, "group=Shadows" ); TwAddVarRW( bar, "Partitioning factor", TW_TYPE_FLOAT, &m_fCascadePartitioningFactor, "min=0 max=1 step=0.01 group=Shadows" ); TwAddVarRW( bar, "Find best cascade", TW_TYPE_BOOLCPP, &m_TerrainRenderParams.m_bBestCascadeSearch, "group=Shadows" ); TwAddVarRW( bar, "Smooth shadows", TW_TYPE_BOOLCPP, &m_TerrainRenderParams.m_bSmoothShadows, "group=Shadows" ); TwAddVarCB( bar, "Num cascades", TW_TYPE_INT32, SetNumCascadesCB, GetNumCascadesCB, this, "min=1 max=8 group=Shadows" ); } TwAddVarRW( bar, "Enable Light Scattering", TW_TYPE_BOOLCPP, &m_bEnableLightScattering, "" ); // Light scattering GUI controls { TwAddVarRW( bar, "Enable light shafts", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bEnableLightShafts, "group=Scattering" ); // Define a new enum type for the tweak bar TwEnumVal LightSctrTech[] = // array used to describe the shadow map resolution { { LIGHT_SCTR_TECHNIQUE_EPIPOLAR_SAMPLING, "Epipolar" }, { LIGHT_SCTR_TECHNIQUE_BRUTE_FORCE, "Brute force" } }; TwType LightSctrTechType = TwDefineEnum( "Light scattering tech", LightSctrTech, _countof( LightSctrTech ) ); TwAddVarRW( bar, "Light scattering tech", LightSctrTechType, &m_PPAttribs.m_uiLightSctrTechnique, "group=Scattering" ); TwEnumVal Pow2Values[] = { { 1, "1" }, { 2, "2" }, { 4, "4" }, { 8, "8" }, { 16, "16" }, { 32, "32" }, { 64, "64" }, { 128, "128" }, { 256, "256" }, { 512, "512" }, { 1024, "1024" }, { 2048, "2048" } }; TwType BigPow2Enum = TwDefineEnum( "Large powers of two", Pow2Values + 7, 5 ); TwAddVarRW( bar, "NumSlices", BigPow2Enum, &m_PPAttribs.m_uiNumEpipolarSlices, "group=Scattering label=\'Num slices\'" ); TwAddVarRW( bar, "MaxSamples", BigPow2Enum, &m_PPAttribs.m_uiMaxSamplesInSlice, "group=Scattering label=\'Max samples\'" ); TwType SmallPow2Enum = TwDefineEnum( "Small powers of two", Pow2Values+2, 5 ); TwAddVarRW( bar, "IntialStep", SmallPow2Enum, &m_PPAttribs.m_uiInitialSampleStepInSlice, "group=Scattering label=\'Initial step\'" ); TwAddVarRW( bar, "ShowSampling", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bShowSampling, "group=Scattering label=\'Show Sampling\'" ); TwAddVarRW( bar, "RefinementThreshold", TW_TYPE_FLOAT, &m_PPAttribs.m_fRefinementThreshold, "group=Scattering label=\'Refinement Threshold\' min=0.01 max=0.5 step=0.01" ); TwAddVarRW( bar, "1DMinMaxOptimization", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bUse1DMinMaxTree, "group=Scattering label=\'Use 1D min/max trees\'" ); TwAddVarRW( bar, "OptimizeSampleLocations", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bOptimizeSampleLocations, "group=Scattering label=\'Optimize Sample Locations\'" ); TwAddVarRW( bar, "CorrectScattering", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bCorrectScatteringAtDepthBreaks, "group=Scattering label=\'Correct Scattering At Depth Breaks\'" ); TwAddVarRW( bar, "ShowDepthBreaks", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bShowDepthBreaks, "group=Scattering label=\'Show Depth Breaks\'" ); TwAddVarRW( bar, "LightingOnly", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bShowLightingOnly, "group=Scattering label=\'Lighting Only\'" ); //TwAddVarRW( bar, "ScatteringScale", TW_TYPE_FLOAT, &m_fScatteringScale, "group=Scattering label=\'Scattering scale\' min=0 max=2 step=0.1" ); TwAddVarRW( bar, "NumIntegrationSteps", TW_TYPE_UINT32, &m_PPAttribs.m_uiInstrIntegralSteps, "min=5 max=100 step=5 group=Advanced label=\'Num Integrtion Steps\'" ); TwDefine( "Settings/Advanced group=Scattering" ); { TwType EpipoleSamplingDensityEnum = TwDefineEnum( "Epipole sampling density enum", Pow2Values, 4 ); TwAddVarRW( bar, "EpipoleSamplingDensity", EpipoleSamplingDensityEnum, &m_PPAttribs.m_uiEpipoleSamplingDensityFactor, "group=Advanced label=\'Epipole sampling density\'" ); } { TwEnumVal SinglSctrMode[] = { { SINGLE_SCTR_MODE_NONE, "None" }, { SINGLE_SCTR_MODE_INTEGRATION, "Integration" }, { SINGLE_SCTR_MODE_LUT, "Look-up table" } }; TwType SinglSctrModeEnum = TwDefineEnum( "Single scattering mode enum", SinglSctrMode, _countof(SinglSctrMode) ); TwAddVarRW( bar, "SingleSctrMode", SinglSctrModeEnum, &m_PPAttribs.m_uiSingleScatteringMode, "group=Advanced label=\'Single scattering\'" ); } { TwEnumVal MultSctrMode[] = { { MULTIPLE_SCTR_MODE_NONE, "None" }, { MULTIPLE_SCTR_MODE_UNOCCLUDED, "Unoccluded" }, { MULTIPLE_SCTR_MODE_OCCLUDED, "Occluded" } }; TwType MultSctrModeEnum = TwDefineEnum( "Higher-order scattering mode enum", MultSctrMode, _countof( MultSctrMode ) ); TwAddVarRW( bar, "MultipleSctrMode", MultSctrModeEnum, &m_PPAttribs.m_uiMultipleScatteringMode, "group=Advanced label=\'Higher-order scattering\'" ); } { TwEnumVal CascadeProcessingMode[] = { { CASCADE_PROCESSING_MODE_SINGLE_PASS, "Single pass" }, { CASCADE_PROCESSING_MODE_MULTI_PASS, "Multi-pass" }, { CASCADE_PROCESSING_MODE_MULTI_PASS_INST, "Multi-pass inst" } }; TwType CascadeProcessingModeEnum = TwDefineEnum( "Cascade processing mode enum", CascadeProcessingMode, _countof( CascadeProcessingMode ) ); TwAddVarRW( bar, "CascadeProcessingMode", CascadeProcessingModeEnum, &m_PPAttribs.m_uiCascadeProcessingMode, "group=Advanced label=\'Cascade processing mode\'" ); } TwAddVarRW( bar, "FirstCascadeToRayMarch", TW_TYPE_INT32, &m_PPAttribs.m_iFirstCascade, "min=0 max=8 step=1 group=Advanced label=\'Start cascade\'" ); TwAddVarRW( bar, "Is32BitMinMaxShadowMap", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bIs32BitMinMaxMipMap, "group=Advanced label=\'Use 32-bit float min/max SM\'" ); { TwEnumVal RefinementCriterion[] = { { REFINEMENT_CRITERION_DEPTH_DIFF, "Depth difference" }, { REFINEMENT_CRITERION_INSCTR_DIFF, "Scattering difference" } }; TwType CascadeProcessingModeEnum = TwDefineEnum( "Refinement criterion enum", RefinementCriterion, _countof( RefinementCriterion ) ); TwAddVarRW( bar, "RefinementCriterion", CascadeProcessingModeEnum, &m_PPAttribs.m_uiRefinementCriterion, "group=Advanced label=\'Refinement criterion\'" ); } { TwEnumVal ExtinctionEvalMode[] = { { EXTINCTION_EVAL_MODE_PER_PIXEL, "Per pixel" }, { EXTINCTION_EVAL_MODE_EPIPOLAR, "Epipolar" } }; TwType ExtinctionEvalModeEnum = TwDefineEnum( "Extinction eval mode enum", ExtinctionEvalMode, _countof( ExtinctionEvalMode ) ); TwAddVarRW( bar, "ExtinctionEval", ExtinctionEvalModeEnum, &m_PPAttribs.m_uiExtinctionEvalMode, "group=Advanced label=\'Extinction eval mode\'" ); } TwAddVarRW( bar, "AerosolDensity", TW_TYPE_FLOAT, &m_PPAttribs.m_fAerosolDensityScale, "group=Advanced label=\'Aerosol density\' min=0.1 max=5.0 step=0.1" ); TwAddVarRW( bar, "AerosolAbsorption", TW_TYPE_FLOAT, &m_PPAttribs.m_fAerosolAbsorbtionScale, "group=Advanced label=\'Aerosol absorption\' min=0.0 max=5.0 step=0.1" ); TwAddVarRW( bar, "UseCustomSctrCoeffs", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bUseCustomSctrCoeffs, "group=Advanced label=\'Use custom scattering coeffs\'" ); #define RLGH_COLOR_SCALE 5e-5f #define MIE_COLOR_SCALE 5e-5f TwAddVarCB(bar, "RayleighColor", TW_TYPE_COLOR4F, []( const void *value, void * clientData ) { AtmosphereSample *pTheSample = reinterpret_cast<AtmosphereSample*>( clientData ); pTheSample->m_f4CustomRlghBeta = *reinterpret_cast<const float4 *>(value) * RLGH_COLOR_SCALE; if( (float3&)pTheSample->m_f4CustomRlghBeta == float3( 0, 0, 0 ) ) { pTheSample->m_f4CustomRlghBeta = float4( 1, 1, 1, 1 ) * RLGH_COLOR_SCALE / 255.f; } }, [](void *value, void * clientData) { AtmosphereSample *pTheSample = reinterpret_cast<AtmosphereSample*>( clientData ); float4 RlghColor = pTheSample->m_f4CustomRlghBeta / RLGH_COLOR_SCALE; RlghColor.w = 1; *reinterpret_cast<float4*>(value) = RlghColor; }, this, "group=Advanced label=\'Rayleigh color\' colormode=rgb"); TwAddVarCB(bar, "MieColor", TW_TYPE_COLOR4F, []( const void *value, void * clientData ) { AtmosphereSample *pTheSample = reinterpret_cast<AtmosphereSample*>( clientData ); pTheSample->m_f4CustomMieBeta = *reinterpret_cast<const float4 *>(value) * MIE_COLOR_SCALE; if( (float3&)pTheSample->m_f4CustomMieBeta == float3( 0, 0, 0 ) ) { pTheSample->m_f4CustomMieBeta = float4( 1, 1, 1, 1 ) * MIE_COLOR_SCALE / 255.f; } }, [](void *value, void * clientData) { AtmosphereSample *pTheSample = reinterpret_cast<AtmosphereSample*>( clientData ); float4 MieColor = pTheSample->m_f4CustomMieBeta / MIE_COLOR_SCALE; MieColor.w = 1; *reinterpret_cast<float4*>(value) = MieColor; }, this, "group=Advanced label=\'Mie color\' colormode=rgb"); #undef RLGH_COLOR_SCALE #undef MIE_COLOR_SCALE TwAddButton(bar, "UpdateCoeffsBtn", [](void *clientData) { AtmosphereSample *pTheSample = reinterpret_cast<AtmosphereSample*>( clientData ); pTheSample->m_PPAttribs.m_f4CustomRlghBeta = pTheSample->m_f4CustomRlghBeta; pTheSample->m_PPAttribs.m_f4CustomMieBeta = pTheSample->m_f4CustomMieBeta; }, this, "group=Advanced label=\'Update coefficients\'"); } // Tone mapping GUI controls { { TwEnumVal ToneMappingMode[] = { {TONE_MAPPING_MODE_EXP, "Exp"}, {TONE_MAPPING_MODE_REINHARD, "Reinhard"}, {TONE_MAPPING_MODE_REINHARD_MOD, "Reinhard Mod"}, {TONE_MAPPING_MODE_UNCHARTED2, "Uncharted 2"}, {TONE_MAPPING_FILMIC_ALU, "Filmic ALU"}, {TONE_MAPPING_LOGARITHMIC, "Logarithmic"}, {TONE_MAPPING_ADAPTIVE_LOG, "Adaptive log"} }; TwType ToneMappingModeEnum = TwDefineEnum( "Tone mapping mode enum", ToneMappingMode, _countof( ToneMappingMode ) ); TwAddVarRW( bar, "ToneMappingMode", ToneMappingModeEnum, &m_PPAttribs.m_uiToneMappingMode, "group=ToneMapping label=\'Mode\'" ); } TwAddVarRW( bar, "WhitePoint", TW_TYPE_FLOAT, &m_PPAttribs.m_fWhitePoint, "group=ToneMapping label=\'White point\' min=0.01 max=10.0 step=0.1" ); TwAddVarRW( bar, "LumSaturation", TW_TYPE_FLOAT, &m_PPAttribs.m_fLuminanceSaturation, "group=ToneMapping label=\'Luminance saturation\' min=0.01 max=2.0 step=0.1" ); TwAddVarRW( bar, "MiddleGray", TW_TYPE_FLOAT, &m_PPAttribs.m_fMiddleGray, "group=ToneMapping label=\'Middle Gray\' min=0.01 max=1.0 step=0.01" ); TwAddVarRW( bar, "AutoExposure", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bAutoExposure, "group=ToneMapping label=\'Auto exposure\'" ); TwAddVarRW( bar, "LightAdaptation", TW_TYPE_BOOLCPP, &m_PPAttribs.m_bLightAdaptation, "group=ToneMapping label=\'Light adaptation\'" ); } const auto& RG16UAttribs = pDevice->GetTextureFormatInfoExt( TEX_FORMAT_RG16_UNORM ); const auto& RG32FAttribs = pDevice->GetTextureFormatInfoExt( TEX_FORMAT_RG32_FLOAT ); bool RG16USupported = RG16UAttribs.Supported && RG16UAttribs.ColorRenderable; bool RG32FSupported = RG32FAttribs.Supported && RG32FAttribs.ColorRenderable; if( !RG16USupported && !RG32FSupported ) { int32_t IsVisible = 0; TwSetParam( bar, "1DMinMaxOptimization", "visible", TW_PARAM_INT32, 1, &IsVisible ); m_PPAttribs.m_bUse1DMinMaxTree = FALSE; } if( !RG16USupported || !RG32FSupported ) { int32_t IsVisible = 0; TwSetParam( bar, "Is32BitMinMaxShadowMap", "visible", TW_PARAM_INT32, 1, &IsVisible ); if( RG16USupported && !RG32FSupported ) m_PPAttribs.m_bIs32BitMinMaxMipMap = FALSE; if( !RG16USupported && RG32FSupported ) m_PPAttribs.m_bIs32BitMinMaxMipMap = TRUE; } }
// Main int main(int argc, char *argv[]) { GLFWwindow* window; glfwSetErrorCallback( error_callback ); if (!glfwInit( )) { exit( EXIT_FAILURE ); } glfwWindowHint( GLFW_VISIBLE, GL_TRUE ); glfwWindowHint( GLFW_RESIZABLE, GL_FALSE ); window = glfwCreateWindow( 1, 1, "Font rendering advanced tweaking", NULL, NULL ); if (!window) { glfwTerminate( ); exit( EXIT_FAILURE ); } glfwMakeContextCurrent( window ); glfwSwapInterval( 1 ); TwInit( TW_OPENGL, NULL ); glfwSetFramebufferSizeCallback( window, reshape ); glfwSetWindowRefreshCallback( window, display ); glfwSetCursorPosCallback( window, cursor_pos ); glfwSetMouseButtonCallback( window, mouse_button ); glfwSetKeyCallback( window, keyboard ); #ifndef __APPLE__ GLenum err = glewInit(); if (GLEW_OK != err) { /* Problem: glewInit failed, something is seriously wrong. */ fprintf( stderr, "Error: %s\n", glewGetErrorString(err) ); exit( EXIT_FAILURE ); } fprintf( stderr, "Using GLEW %s\n", glewGetString(GLEW_VERSION) ); #endif // Create a new tweak bar bar = TwNewBar("TweakBar"); TwDefine("GLOBAL " "help = 'This example shows how to tune all font parameters.' "); TwDefine("TweakBar " "size = '280 400' " "position = '500 20' " "color = '127 127 127' " "alpha = 240 " "label = 'Parameters' " "resizable = True " "fontresizable = True " "iconifiable = True "); { TwEnumVal familyEV[NUM_FONTS] = { {VERA, "Vera"}, {VERA_MONO, "Vera Mono"}, {LUCKIEST_GUY, "Luckiest Guy"}, {SOURCE_SANS, "Source Sans Pro"}, {SOURCE_CODE, "Source Code Pro"}, {OLD_STANDARD, "Old Standard TT"}, {LOBSTER, "Lobster"} }; TwType family_type = TwDefineEnum("Family", familyEV, NUM_FONTS); TwAddVarCB(bar, "Family", family_type, set_family, get_family, NULL, "label = 'Family' " "group = 'Font' " "help = ' ' "); } TwAddVarCB(bar, "Size", TW_TYPE_FLOAT, set_size, get_size, NULL, "label = 'Size' " "group = 'Font' " "min = 6.0 " "max = 24.0 " "step = 0.05 " "help = ' ' "); TwAddVarCB(bar, "LCD filtering", TW_TYPE_BOOL32, set_lcd_filtering, get_lcd_filtering, NULL, "label = 'LCD filtering' " "group = 'Font' " "help = ' ' "); // Rendering TwAddVarCB(bar, "Kerning", TW_TYPE_BOOL32, set_kerning, get_kerning, NULL, "label = 'Kerning' " "group = 'Rendering' " "help = ' ' "); TwAddVarCB(bar, "Hinting", TW_TYPE_BOOL32, set_hinting, get_hinting, NULL, "label = 'Hinting' " "group = 'Rendering' " "help = ' ' "); // Color TwAddVarCB(bar, "Invert", TW_TYPE_BOOL32, set_invert, get_invert, NULL, "label = 'Invert' " "group = 'Color' " "help = ' ' "); // Glyph TwAddVarCB(bar, "Width", TW_TYPE_FLOAT, set_width, get_width, NULL, "label = 'Width' " "group = 'Glyph' " "min = 0.75 " "max = 1.25 " "step = 0.01 " "help = ' ' "); TwAddVarCB(bar, "Interval", TW_TYPE_FLOAT, set_interval, get_interval, NULL, "label = 'Spacing' " "group = 'Glyph' " "min = -0.2 " "max = 0.2 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Faux italic", TW_TYPE_FLOAT, set_faux_italic, get_faux_italic, NULL, "label = 'Faux italic' " "group = 'Glyph' " "min = -30.0 " "max = 30.0 " "step = 0.1 " "help = ' ' "); // Energy distribution TwAddVarCB(bar, "Primary", TW_TYPE_FLOAT, set_primary, get_primary, NULL, "label = 'Primary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Secondary", TW_TYPE_FLOAT, set_secondary, get_secondary, NULL, "label = 'Secondy weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Tertiary", TW_TYPE_FLOAT, set_tertiary, get_tertiary, NULL, "label = 'Tertiary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddSeparator(bar, "", "group = 'Energy distribution' " ); TwAddVarCB(bar, "Gamma", TW_TYPE_FLOAT, set_gamma, get_gamma, NULL, "label = 'Gamma correction' " "group = 'Energy distribution' " "min = 0.50 " "max = 2.5 " "step = 0.01 " "help = ' ' "); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Reset", (TwButtonCallback) reset, NULL, "help='Reset all parameters to default values.'"); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Quit", (TwButtonCallback) quit, window, "help='Quit.'"); buffer_a = text_buffer_new( 1 ); buffer_rgb = text_buffer_new( 3 ); buffer = buffer_rgb; reset(); mat4_set_identity( &projection ); mat4_set_identity( &model ); mat4_set_identity( &view ); glfwSetWindowSize( window, 800, 600 ); glfwShowWindow( window ); while(!glfwWindowShouldClose( window )) { display( window ); glfwPollEvents( ); } TwTerminate(); glfwDestroyWindow( window ); glfwTerminate( ); return EXIT_SUCCESS; }
// Main int main(int argc, char *argv[]) { glutInit( &argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH ); glutInitWindowSize( 800, 600 ); glutCreateWindow( "Font rendering advanced tweaking" ); glutCreateMenu( NULL ); #ifndef __APPLE__ GLenum err = glewInit(); if (GLEW_OK != err) { /* Problem: glewInit failed, something is seriously wrong. */ fprintf( stderr, "Error: %s\n", glewGetErrorString(err) ); exit( EXIT_FAILURE ); } fprintf( stderr, "Using GLEW %s\n", glewGetString(GLEW_VERSION) ); #endif glutDisplayFunc( display ); glutReshapeFunc( reshape ); atexit( terminate ); TwInit( TW_OPENGL, NULL ); glutMouseFunc( (GLUTmousebuttonfun)TwEventMouseButtonGLUT ); glutMotionFunc( (GLUTmousemotionfun)TwEventMouseMotionGLUT ); glutPassiveMotionFunc( (GLUTmousemotionfun)TwEventMouseMotionGLUT ); glutKeyboardFunc( (GLUTkeyboardfun)TwEventKeyboardGLUT ); glutSpecialFunc( (GLUTspecialfun)TwEventSpecialGLUT ); TwGLUTModifiersFunc( glutGetModifiers ); // Create a new tweak bar bar = TwNewBar("TweakBar"); TwDefine("GLOBAL " "help = 'This example shows how to tune all font parameters.' "); TwDefine("TweakBar " "size = '280 400' " "position = '500 20' " "color = '127 127 127' " "alpha = 240 " "label = 'Parameters' " "resizable = True " "fontresizable = True " "iconifiable = True "); { TwEnumVal familyEV[NUM_FONTS] = { {VERA, "Vera"}, {VERA_MONO, "Vera Mono"}, {LUCKIEST_GUY, "Luckiest Guy"}, {SOURCE_SANS, "Source Sans Pro"}, {SOURCE_CODE, "Source Code Pro"}, {OLD_STANDARD, "Old Standard TT"}, {LOBSTER, "Lobster"} }; TwType family_type = TwDefineEnum("Family", familyEV, NUM_FONTS); TwAddVarCB(bar, "Family", family_type, set_family, get_family, NULL, "label = 'Family' " "group = 'Font' " "help = ' ' "); } TwAddVarCB(bar, "Size", TW_TYPE_FLOAT, set_size, get_size, NULL, "label = 'Size' " "group = 'Font' " "min = 6.0 " "max = 24.0 " "step = 0.05 " "help = ' ' "); TwAddVarCB(bar, "LCD filtering", TW_TYPE_BOOL32, set_lcd_filtering, get_lcd_filtering, NULL, "label = 'LCD filtering' " "group = 'Font' " "help = ' ' "); // Rendering TwAddVarCB(bar, "Kerning", TW_TYPE_BOOL32, set_kerning, get_kerning, NULL, "label = 'Kerning' " "group = 'Rendering' " "help = ' ' "); TwAddVarCB(bar, "Hinting", TW_TYPE_BOOL32, set_hinting, get_hinting, NULL, "label = 'Hinting' " "group = 'Rendering' " "help = ' ' "); // Color TwAddVarCB(bar, "Invert", TW_TYPE_BOOL32, set_invert, get_invert, NULL, "label = 'Invert' " "group = 'Color' " "help = ' ' "); // Glyph TwAddVarCB(bar, "Width", TW_TYPE_FLOAT, set_width, get_width, NULL, "label = 'Width' " "group = 'Glyph' " "min = 0.75 " "max = 1.25 " "step = 0.01 " "help = ' ' "); TwAddVarCB(bar, "Interval", TW_TYPE_FLOAT, set_interval, get_interval, NULL, "label = 'Spacing' " "group = 'Glyph' " "min = -0.2 " "max = 0.2 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Faux italic", TW_TYPE_FLOAT, set_faux_italic, get_faux_italic, NULL, "label = 'Faux italic' " "group = 'Glyph' " "min = -30.0 " "max = 30.0 " "step = 0.1 " "help = ' ' "); // Energy distribution TwAddVarCB(bar, "Primary", TW_TYPE_FLOAT, set_primary, get_primary, NULL, "label = 'Primary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Secondary", TW_TYPE_FLOAT, set_secondary, get_secondary, NULL, "label = 'Secondy weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddVarCB(bar, "Tertiary", TW_TYPE_FLOAT, set_tertiary, get_tertiary, NULL, "label = 'Tertiary weight' " "group = 'Energy distribution' " "min = 0 " "max = 1 " "step = 0.01 " "help = ' ' " ); TwAddSeparator(bar, "", "group = 'Energy distribution' " ); TwAddVarCB(bar, "Gamma", TW_TYPE_FLOAT, set_gamma, get_gamma, NULL, "label = 'Gamma correction' " "group = 'Energy distribution' " "min = 0.50 " "max = 2.5 " "step = 0.01 " "help = ' ' "); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Reset", (TwButtonCallback) reset, NULL, "help='Reset all parameters to default values.'"); TwAddSeparator(bar, "", ""); TwAddButton(bar, "Quit", (TwButtonCallback) quit, NULL, "help='Quit.'"); buffer_a = text_buffer_new( 1 ); buffer_rgb = text_buffer_new( 3 ); buffer = buffer_rgb; reset(); glutTimerFunc( 1000.0/60.0, timer, 60 ); mat4_set_identity( &projection ); mat4_set_identity( &model ); mat4_set_identity( &view ); glutMainLoop(); return EXIT_SUCCESS; }
// Main function int main() { // Initialize GLFW if( !glfwInit() ) { // A fatal error occurred std::cerr << "GLFW initialization failed" << std::endl; return 1; } // Create a window GLFWvidmode mode; glfwGetDesktopMode(&mode); if( !glfwOpenWindow(800, 600, mode.RedBits, mode.GreenBits, mode.BlueBits, 0, 16, 0, GLFW_WINDOW /* or GLFW_FULLSCREEN */) ) { // A fatal error occurred std::cerr << "Cannot open GLFW window" << std::endl; glfwTerminate(); return 1; } glfwSwapInterval(0); glfwEnable(GLFW_MOUSE_CURSOR); glfwEnable(GLFW_KEY_REPEAT); const char title[] = "AntTweakBar example: TwAdvanced1"; glfwSetWindowTitle(title); // Set GLFW event callbacks glfwSetWindowSizeCallback(OnWindowSize); glfwSetMouseButtonCallback(OnMouseButton); glfwSetMousePosCallback(OnMousePos); glfwSetMouseWheelCallback(OnMouseWheel); glfwSetKeyCallback(OnKey); glfwSetCharCallback(OnChar); // Initialize AntTweakBar TwInit(TW_OPENGL, NULL); // Change the font size, and add a global message to the Help bar. TwDefine(" GLOBAL fontSize=3 help='This example illustrates the definition of custom structure type as well as many other features.' "); // Initialize the 3D scene Scene scene; scene.Init(true); // Create a tweak bar called 'Main' and change its refresh rate, position, size and transparency TwBar *mainBar = TwNewBar("Main"); TwDefine(" Main label='Main TweakBar' refresh=0.5 position='16 16' size='260 320' alpha=0"); // Add some variables to the Main tweak bar TwAddVarRW(mainBar, "Wireframe", TW_TYPE_BOOLCPP, &scene.Wireframe, " group='Display' key=w help='Toggle wireframe display mode.' "); // 'Wireframe' is put in the group 'Display' (which is then created) TwAddVarRW(mainBar, "BgTop", TW_TYPE_COLOR3F, &scene.BgColor1, " group='Background' help='Change the top background color.' "); // 'BgTop' and 'BgBottom' are put in the group 'Background' (which is then created) TwAddVarRW(mainBar, "BgBottom", TW_TYPE_COLOR3F, &scene.BgColor0, " group='Background' help='Change the bottom background color.' "); TwDefine(" Main/Background group='Display' "); // The group 'Background' of bar 'Main' is put in the group 'Display' TwAddVarCB(mainBar, "Subdiv", TW_TYPE_INT32, SetSubdivCB, GetSubdivCB, &scene, " group='Scene' label='Meshes subdivision' min=1 max=50 keyincr=s keyDecr=S help='Subdivide the meshes more or less (switch to wireframe to see the effect).' "); TwAddVarRW(mainBar, "Ambient", TW_TYPE_FLOAT, &scene.Ambient, " label='Ambient factor' group='Scene' min=0 max=1 step=0.001 keyIncr=a keyDecr=A help='Change scene ambient.' "); TwAddVarRW(mainBar, "Reflection", TW_TYPE_FLOAT, &scene.Reflection, " label='Reflection factor' group='Scene' min=0 max=1 step=0.001 keyIncr=r keyDecr=R help='Change ground reflection.' "); // Create a new TwType called rotationType associated with the Scene::RotMode enum, and use it TwEnumVal rotationEV[] = { { Scene::ROT_OFF, "Stopped"}, { Scene::ROT_CW, "Clockwise" }, { Scene::ROT_CCW, "Counter-clockwise" } }; TwType rotationType = TwDefineEnum( "Rotation Mode", rotationEV, 3 ); TwAddVarRW(mainBar, "Rotation", rotationType, &scene.Rotation, " group='Scene' keyIncr=Backspace keyDecr=SHIFT+Backspace help='Stop or change the rotation mode.' "); // Add a read-only float variable; its precision is 0 which means that the fractionnal part of the float value will not be displayed TwAddVarRO(mainBar, "RotYAngle", TW_TYPE_DOUBLE, &scene.RotYAngle, " group='Scene' label='Rot angle (degree)' precision=0 help='Animated rotation angle' "); // Initialize time double time = glfwGetTime(), dt = 0; // Current time and elapsed time double frameDTime = 0, frameCount = 0, fps = 0; // Framerate // Main loop (repeated while window is not closed) while( glfwGetWindowParam(GLFW_OPENED) ) { // Get elapsed time dt = glfwGetTime() - time; if (dt < 0) dt = 0; time += dt; // Rotate scene if( scene.Rotation==Scene::ROT_CW ) scene.RotYAngle -= 5.0*dt; else if( scene.Rotation==Scene::ROT_CCW ) scene.RotYAngle += 5.0*dt; // Move lights scene.Update(time); // Draw scene scene.Draw(); // Draw tweak bars TwDraw(); // Present frame buffer glfwSwapBuffers(); // Estimate framerate frameCount++; frameDTime += dt; if( frameDTime>1.0 ) { fps = frameCount/frameDTime; char newTitle[128]; _snprintf(newTitle, sizeof(newTitle), "%s (%.1f fps)", title, fps); //glfwSetWindowTitle(newTitle); // uncomment to display framerate frameCount = frameDTime = 0; } } // Terminate AntTweakBar and GLFW TwTerminate(); glfwTerminate(); return 0; }
// Create a tweak bar for lights. // New enum type and struct type are defined and used by this bar. void Scene::CreateBar() { // Create a new tweak bar and change its label, position and transparency lightsBar = TwNewBar("Lights"); TwDefine(" Lights label='Lights TweakBar' position='580 16' alpha=0 help='Use this bar to edit the lights in the scene.' "); // Add a variable of type int to control the number of lights TwAddVarRW(lightsBar, "NumLights", TW_TYPE_INT32, &NumLights, " label='Number of lights' keyIncr=l keyDecr=L help='Changes the number of lights in the scene.' "); // Set the NumLights min value (=0) and max value (depends on the user graphic card) int zero = 0; TwSetParam(lightsBar, "NumLights", "min", TW_PARAM_INT32, 1, &zero); TwSetParam(lightsBar, "NumLights", "max", TW_PARAM_INT32, 1, &maxLights); // Note, TwDefine could also have been used for that pupose like this: // char def[256]; // _snprintf(def, 255, "Lights/NumLights min=0 max=%d", maxLights); // TwDefine(def); // min and max are defined using a definition string // Add a button to re-initialize the lights; this button calls the ReinitCB callback function TwAddButton(lightsBar, "Reinit", ReinitCB, this, " label='Change lights' key=c help='Random changes of lights parameters.' "); // Define a new enum type for the tweak bar TwEnumVal modeEV[] = // array used to describe the Scene::AnimMode enum values { { Light::ANIM_FIXED, "Fixed" }, { Light::ANIM_BOUNCE, "Bounce" }, { Light::ANIM_ROTATE, "Rotate" }, { Light::ANIM_COMBINED, "Combined" } }; TwType modeType = TwDefineEnum("Mode", modeEV, 4); // create a new TwType associated to the enum defined by the modeEV array // Define a new struct type: light variables are embedded in this structure TwStructMember lightMembers[] = // array used to describe tweakable variables of the Light structure { { "Active", TW_TYPE_BOOLCPP, offsetof(Light, Active), " help='Enable/disable the light.' " }, // Light::Active is a C++ boolean value { "Color", TW_TYPE_COLOR4F, offsetof(Light, Color), " noalpha help='Light color.' " }, // Light::Color is represented by 4 floats, but alpha channel should be ignored { "Radius", TW_TYPE_FLOAT, offsetof(Light, Radius), " min=0 max=4 step=0.02 help='Light radius.' " }, { "Animation", modeType, offsetof(Light, Animation), " help='Change the animation mode.' " }, // use the enum 'modeType' created before to tweak the Light::Animation variable { "Speed", TW_TYPE_FLOAT, offsetof(Light, Speed0), " readonly=true help='Light moving speed.' " } // Light::Speed is made read-only }; TwType lightType = TwDefineStruct("Light", lightMembers, 5, sizeof(Light), NULL, NULL); // create a new TwType associated to the struct defined by the lightMembers array // Use the newly created 'lightType' to add variables associated with lights for(int i=0; i<maxLights; ++i) // Add 'maxLights' variables of type lightType; { // unused lights variables (over NumLights) will hidden by Scene::Update( ) _snprintf(lights[i].Name, sizeof(lights[i].Name), "%d", i+1); // Create a name for each light ("1", "2", "3",...) TwAddVarRW(lightsBar, lights[i].Name, lightType, &lights[i], " group='Edit lights' "); // Add a lightType variable and group it into the 'Edit lights' group // Set 'label' and 'help' parameters of the light char paramValue[64]; _snprintf(paramValue, sizeof(paramValue), "Light #%d", i+1); TwSetParam(lightsBar, lights[i].Name, "label", TW_PARAM_CSTRING, 1, paramValue); // Set label _snprintf(paramValue, sizeof(paramValue), "Parameters of the light #%d", i+1); TwSetParam(lightsBar, lights[i].Name, "help", TW_PARAM_CSTRING, 1, paramValue); // Set help // Note, parameters could also have been set using the define string of TwAddVarRW like this: // char def[256]; // _snprintf(def, sizeof(def), "group='Edit lights' label='Light #%d' help='Parameters of the light #%d' ", i+1, i+1); // TwAddVarRW(lightsBar, lights[i].Name, lightType, &lights[i], def); // Add a lightType variable, group it into the 'Edit lights' group, and name it 'Light #n' } }
// Main int main(int argc, char *argv[]) { TwBar *bar; // Pointer to the tweak bar float axis[] = { 0.7f, 0.7f, 0.0f }; // initial model rotation float angle = 0.8f; // Initialize AntTweakBar // (note that AntTweakBar could also be intialized after GLUT, no matter) if( !TwInit(TW_OPENGL, NULL) ) { // A fatal error occured fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError()); return 1; } // Initialize GLUT glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(640, 480); glutCreateWindow("AntTweakBar simple example using GLUT"); glutCreateMenu(NULL); // Set GLUT callbacks glutDisplayFunc(Display); glutReshapeFunc(Reshape); atexit(Terminate); // Called after glutMainLoop ends // Set GLUT event callbacks // - Directly redirect GLUT mouse button events to AntTweakBar glutMouseFunc((GLUTmousebuttonfun)TwEventMouseButtonGLUT); // - Directly redirect GLUT mouse motion events to AntTweakBar glutMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT); // - Directly redirect GLUT mouse "passive" motion events to AntTweakBar (same as MouseMotion) glutPassiveMotionFunc((GLUTmousemotionfun)TwEventMouseMotionGLUT); // - Directly redirect GLUT key events to AntTweakBar glutKeyboardFunc((GLUTkeyboardfun)TwEventKeyboardGLUT); // - Directly redirect GLUT special key events to AntTweakBar glutSpecialFunc((GLUTspecialfun)TwEventSpecialGLUT); // - Send 'glutGetModifers' function pointer to AntTweakBar; // required because the GLUT key event functions do not report key modifiers states. TwGLUTModifiersFunc(glutGetModifiers); // Create some 3D objects (stored in display lists) glNewList(SHAPE_TEAPOT, GL_COMPILE); glutSolidTeapot(1.0); glEndList(); glNewList(SHAPE_TORUS, GL_COMPILE); glutSolidTorus(0.3, 1.0, 16, 32); glEndList(); glNewList(SHAPE_CONE, GL_COMPILE); glutSolidCone(1.0, 1.5, 64, 4); glEndList(); // Create a tweak bar bar = TwNewBar("TweakBar"); TwDefine(" GLOBAL help='This example shows how to integrate AntTweakBar with GLUT and OpenGL.' "); // Message added to the help bar. TwDefine(" TweakBar size='200 400' color='96 216 224' "); // change default tweak bar size and color // Add 'g_Zoom' to 'bar': this is a modifable (RW) variable of type TW_TYPE_FLOAT. Its key shortcuts are [z] and [Z]. TwAddVarRW(bar, "Zoom", TW_TYPE_FLOAT, &g_Zoom, " min=0.01 max=2.5 step=0.01 keyIncr=z keyDecr=Z help='Scale the object (1=original size).' "); // Add 'g_Rotation' to 'bar': this is a variable of type TW_TYPE_QUAT4F which defines the object's orientation TwAddVarRW(bar, "ObjRotation", TW_TYPE_QUAT4F, &g_Rotation, " label='Object rotation' open help='Change the object orientation.' "); // Add callback to toggle auto-rotate mode (callback functions are defined above). TwAddVarCB(bar, "AutoRotate", TW_TYPE_BOOL32, SetAutoRotateCB, GetAutoRotateCB, NULL, " label='Auto-rotate' key=space help='Toggle auto-rotate mode.' "); // Add 'g_LightMultiplier' to 'bar': this is a variable of type TW_TYPE_FLOAT. Its key shortcuts are [+] and [-]. TwAddVarRW(bar, "Multiplier", TW_TYPE_FLOAT, &g_LightMultiplier, " label='Light booster' min=0.1 max=4 step=0.02 keyIncr='+' keyDecr='-' help='Increase/decrease the light power.' "); // Add 'g_LightDirection' to 'bar': this is a variable of type TW_TYPE_DIR3F which defines the light direction TwAddVarRW(bar, "LightDir", TW_TYPE_DIR3F, &g_LightDirection, " label='Light direction' open help='Change the light direction.' "); // Add 'g_MatAmbient' to 'bar': this is a variable of type TW_TYPE_COLOR3F (3 floats color, alpha is ignored) // and is inserted into a group named 'Material'. TwAddVarRW(bar, "Ambient", TW_TYPE_COLOR3F, &g_MatAmbient, " group='Material' "); // Add 'g_MatDiffuse' to 'bar': this is a variable of type TW_TYPE_COLOR3F (3 floats color, alpha is ignored) // and is inserted into group 'Material'. TwAddVarRW(bar, "Diffuse", TW_TYPE_COLOR3F, &g_MatDiffuse, " group='Material' "); // Add the enum variable 'g_CurrentShape' to 'bar' // (before adding an enum variable, its enum type must be declared to AntTweakBar as follow) { // ShapeEV associates Shape enum values with labels that will be displayed instead of enum values TwEnumVal shapeEV[NUM_SHAPES] = { {SHAPE_TEAPOT, "Teapot"}, {SHAPE_TORUS, "Torus"}, {SHAPE_CONE, "Cone"} }; // Create a type for the enum shapeEV TwType shapeType = TwDefineEnum("ShapeType", shapeEV, NUM_SHAPES); // add 'g_CurrentShape' to 'bar': this is a variable of type ShapeType. Its key shortcuts are [<] and [>]. TwAddVarRW(bar, "Shape", shapeType, &g_CurrentShape, " keyIncr='<' keyDecr='>' help='Change object shape.' "); } // Store time g_RotateTime = glutGet(GLUT_ELAPSED_TIME); // Init rotation SetQuaternionFromAxisAngle(axis, angle, g_Rotation); SetQuaternionFromAxisAngle(axis, angle, g_RotateStart); // Call the GLUT main loop glutMainLoop(); return 0; }
int main(int argc, char *argv[]) { // Initialize openGL, glut, glew initGraphics(argc, argv); // Initialize AntTweakBar TwInit(TW_OPENGL, NULL); //initialize the timer frequency QueryPerformanceFrequency(&Frequency); // Set GLUT callbacks glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutMouseFunc(MouseButton); glutMotionFunc(MouseMotion); glutPassiveMotionFunc(PassiveMouseMotion); glutKeyboardFunc(Keyboard); glutSpecialFunc(Special); //send 'glutGetModifers' function pointer to AntTweakBar. //required because the GLUT key event functions do not report key modifiers states. //TwGLUTModifiersFunc(glutGetModifiers); atexit(Terminate); //called after glutMainLoop ends // Create a tweak bar TwBar* bar = TwNewBar("TweakBar"); TwDefine(" GLOBAL help='This example shows how to integrate AntTweakBar with GLUT and OpenGL.' "); // Message added to the help bar. TwDefine(" TweakBar size='200 600' color='96 216 224' "); // change default tweak bar size and color //*********************************************************************************** //add 'g_Scale' to 'bar': this is a modifiable (RW) variable of type TW_TYPE_DOUBLE. Its key shortcuts are [z] and [Z]. //TwAddVarRW(bar, "Scale", TW_TYPE_DOUBLE, &g_Scale, " min=0.01 max=2.5 step=0.01 keyIncr=z keyDecr=Z help='Scale the object (1=original size).' "); //*********************************************************************************** TwAddButton(bar, "LoadOBJ", loadOBJModel, NULL, "help='button to load obf file'"); TwAddSeparator(bar, NULL, NULL); TwAddVarRW(bar, "reset", TW_TYPE_BOOLCPP, &g_reset, "help='reset everything'"); TwAddVarRW(bar, "OW space", TW_TYPE_BOOLCPP, &g_space, " help='true=transforma in world space ,false=transform in object space' "); TwAddVarRW(bar, "OW Crd System", TW_TYPE_BOOLCPP, &g_showCrdSystem, " help='boolean variable to indicate if to show WO coordinate system or not.' "); TwAddVarRW(bar, "showBbox", TW_TYPE_BOOLCPP, &g_bbox, " help='boolean variable to indicate if to show the bbox or not.' "); TwAddVarRW(bar, "showNormals", TW_TYPE_BOOLCPP, &g_normals, " help='boolean variable to indicate if to show normals or not.' group='normals'"); TwAddVarRW(bar, "normalsSize", TW_TYPE_DOUBLE, &g_normals_size, " min=0.1 max=100 step=0.1 keyIncr=t keyDecr=T help='Change notmals size (20=original size).' group='normals'"); TwAddVarRW(bar, "projectionType", TW_TYPE_BOOLCPP, &g_projectionType, " help='true = orthographic, false = perspective.' group='camera'"); TwAddVarRW(bar, "near", TW_TYPE_DOUBLE, &g_near, "step=0.01 keyIncr=n keyDecr=N group='camera'"); TwAddVarRW(bar, "far", TW_TYPE_DOUBLE, &g_far, "step=0.1 keyIncr=f keyDecr=F group='camera'"); TwAddVarRW(bar, "fovy", TW_TYPE_DOUBLE, &g_fovy, "step=0.1 keyIncr=v keyDecr=V group='camera'"); TwAddVarRW(bar, "centerCamera", TW_TYPE_BOOLCPP, &g_centerCam, "help='point the camera to the center of the model' group='camera'"); TwAddVarRW(bar, "translate X", TW_TYPE_DOUBLE, &g_translationX, "min=-30 max=30 step=1 keyIncr=right keyDecr=left group='tranfromations' "); TwAddVarRW(bar, "translate Y", TW_TYPE_DOUBLE, &g_translationY, "min=-30 max=30 step=1 keyIncr=up keyDecr=down group='tranfromations' "); TwAddVarRW(bar, "translate Z", TW_TYPE_DOUBLE, &g_translationZ, "min=-30 max=30 step=1 keyIncr=> keyDecr=< group='tranfromations' "); TwAddButton(bar, "apply translation", applyTranslation, NULL, "help='apply translation' group='tranfromations' "); TwAddVarRW(bar, "scale", TW_TYPE_DOUBLE, &g_scale, " min=0.01 max=2.5 step=0.01 keyIncr=+ keyDecr=- group='tranfromations' "); TwAddButton(bar, "apply scale", &applyScale, NULL, "help='apply scale' group='tranfromations' "); TwAddVarRW(bar, "x-rotation", TW_TYPE_DOUBLE, &g_xRotation, "min = -360 max = 360 step=1 keyIncr=x keyDecr=X group='tranfromations' "); TwAddButton(bar, "apply x rotation", &applyXrotation, NULL, " help='apply scale' group='tranfromations' "); TwAddVarRW(bar, "y-rotation", TW_TYPE_DOUBLE, &g_yRotation, "min = -360 max = 360 step=1 keyIncr=y keyDecr=Y group='tranfromations' "); TwAddButton(bar, "apply y rotation", &applyYrotation, NULL, " help='apply scale' group='tranfromations' "); TwAddVarRW(bar, "z-rotation", TW_TYPE_DOUBLE, &g_zRotation, "min = -360 max = 360 step=1 keyIncr=z keyDecr=Z group='tranfromations' "); TwAddButton(bar, "apply z rotation", &applyZrotation, NULL, " help='apply scale' group='tranfromations' "); TwAddVarRW(bar, "ambient", TW_TYPE_DOUBLE, &g_ambient, "min = 0 max = 1000 step=0.1 keyIncr=z keyDecr=Z group='material' "); TwAddVarRW(bar, "diffuse", TW_TYPE_DOUBLE, &g_diffuse, "min = 0 max = 1000 step=0.1 keyIncr=z keyDecr=Z group='material' "); TwAddVarRW(bar, "specular", TW_TYPE_DOUBLE, &g_specular, "min = 0 max = 1000 step=0.1 keyIncr=z keyDecr=Z group='material' "); TwAddVarRW(bar, "specularExp", TW_TYPE_DOUBLE, &g_specularExp, "min = 0 max = 1000 step=1 keyIncr=z keyDecr=Z group='material' "); TwAddVarRW(bar, "x-position", TW_TYPE_DOUBLE, &g_xLightPosition, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "y-position", TW_TYPE_DOUBLE, &g_yLightPosition, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "z-position", TW_TYPE_DOUBLE, &g_zLightPosition, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "x-direction", TW_TYPE_DOUBLE, &g_xLightDirection, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "y-direction", TW_TYPE_DOUBLE, &g_yLightDirection, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "z-direction", TW_TYPE_DOUBLE, &g_zLightDirection, "min = -1000 max = 1000 step=1 keyIncr=z keyDecr=Z group='light' "); TwAddVarRW(bar, "point/directional", TW_TYPE_BOOLCPP, &g_lightType, "help='false=point, true=directional' group='light'"); TwAddVarRW(bar, "light intensity", TW_TYPE_COLOR32, &g_lightIntensity, " coloralpha=true colormode=rgb group='light'"); TwAddButton(bar, "apply on light 1", &applyLight1, NULL, " help='apply scale' group='light' "); TwAddButton(bar, "apply on light 2", &applyLight2, NULL, " help='apply scale' group='light' "); TwAddVarRW(bar, "ambient light intensity", TW_TYPE_COLOR32, &g_ambientLight, "coloralpha=true colormode=rgb group='light' "); shadingType = TwDefineEnum("ShadingType", NULL, 0); TwAddVarRW(bar, "shading type", shadingType, &g_shadingType, " enum='0 {FLAT}, 1 {GOURAUD}, 2 {PHONG}' group='shading'"); TwAddVarRW(bar, "show mesh model", TW_TYPE_BOOLCPP, &g_mesh, "help='false=shading, true=meshmodel' group='shading'"); TwAddSeparator(bar, NULL, NULL); //time display - don't delete TwAddVarRO(bar, "time (us)", TW_TYPE_UINT32, &ElapsedMicroseconds.LowPart, "help='shows the drawing time in micro seconds'"); // Call the GLUT main loop glutMainLoop(); return 0; }