30#include "../../objects/PWindow.h"
31#include "../../objects/PColor.h"
32#include "../../base/Evaluator.h"
33#include "../../base/VariableMap.h"
34#include "../../base/PComplexData.h"
35#include "../../libs/PEBLEnvironment.h"
39#include "emscripten.h"
79 SDL_DestroyWindow(mWindow);
87 out <<
"<SDL PlatformWindow>" << flush;
110 cerr <<
"Initializing " << width <<
"--" << height << endl;
120 bool softrender =
false;
147 SDL_SetHint(
"SDL_HINT_RENDER_DRIVER",
157 SDL_SetHint(
"SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES",
"1");
163 SDL_SetHint(
"SDL_HINT_RENDER_VSYNC",
"1");
167 SDL_SetHint(
"SDL_HINT_MOUSE_RELATIVE_MODE_WARP",
"1");
173 int rflags = SDL_RENDERER_TARGETTEXTURE;
176 rflags |= SDL_RENDERER_SOFTWARE;
180 rflags |= SDL_RENDERER_ACCELERATED;
182#ifndef PEBL_EMSCRIPTEN
185 rflags |= SDL_RENDERER_PRESENTVSYNC;
207 vflags |= SDL_WINDOW_FULLSCREEN ;
212 vflags |= SDL_WINDOW_RESIZABLE;
228 Variant scriptname =
"PEBL Application";
234 std::string sname = scriptname;
235 int x= SDL_WINDOWPOS_CENTERED;
239 x = SDL_WINDOWPOS_UNDEFINED;
240 y = SDL_WINDOWPOS_UNDEFINED;
243 mWindow =SDL_CreateWindow(sname.c_str(),x,y,
246 width,height, vflags);
250 mRenderer = SDL_CreateRenderer(mWindow, -1,rflags);
269 cerr <<
"Unable to set " << width <<
"x" << height <<
": " << depth <<
" video mode: " << SDL_GetError() << endl;
274 SDL_Rect** modes = SDL_ListModes(
NULL,vflags);
275 if(modes == (SDL_Rect**)0)
277 cerr <<
"No Video Modes Available" << endl;
279 for(
int i=0; modes[i];++i)
285 cerr <<
"Trying resolution:" << width <<
"x" << height <<
": " << depth <<
" video mode:\n ";
286 mSurface = SDL_SetVideoMode(width,height,depth,vflags);
289 cerr <<
"Using resolution:" << width <<
"x" << height <<
": " << depth <<
" video mode:\n ";
294 cerr <<
"..........Resolution failed\n";
298 cerr<<
"Resolution may not be optimal. Alternate resolutions available on system include:\n";
300 modes =SDL_ListModes(
NULL,vflags);
301 for(
int ii=0; modes[ii]; ++ii)
303 cerr << ii<<
". gVideoWidth <-"<< modes[ii]->w<<
"; gVideoHeight<- " << modes[ii]->h <<
"\n";
329 cerr <<
"\n\n--------------------------------------------------------------------------------\n";
330 cerr <<
" Application settings:" << endl;
332 cerr <<
"Script name: [" << sname <<
"]\n";
334 cerr <<
"--------------------------------------------------------------------------------\n";
336 cerr <<
"Display Mode: Width (pixels) [" << width <<
"]\n";
337 cerr <<
"Display Mode: Height (pixels) [" << height <<
"]\n";
338 cerr <<
"Display Mode: Color Depth (bits) [" << depth <<
"]\n";
339 cerr <<
"vsync mode: [" << vsync <<
"]\n";
340 cerr <<
"Software renderer mode: [" <<softrender <<
"]\n";
341 cerr <<
"Windowed: ["<<windowed<<
"]\n";
342 cerr <<
"Resizeable: ["<<resizeable<<
"]\n";
344 cerr <<
"Driver hint (gDriverHint): ";
358 cerr <<
"Base font (gPEBLBaseFont): ["<<
361 cerr <<
"Base Mono font (gPEBLBaseFontMono): ["<<
364 cerr <<
"Base serif (gPEBLBaseFontSerif): ["<<
367 cerr <<
"Language (gLanguage): ["<<
370 cerr <<
"Parameter file (gParamFile): ["<<
373 cerr <<
"Busy/Easy wait: (gSleepEasy): ["<<
377 cerr <<
"Executable name: (gExecutableName): ["<<
381 cerr <<
"Resource path: (gPEBLResourcePath): [" <<
385 cerr <<
"Resource path: (gPEBLBasePath): [" <<
388 cerr <<
"Working directory: (gWorkingDirectory): [" <<
393 SDL_RendererInfo drinfo;
394 cerr <<
"Renderer information:\n";
396 cerr <<
"Driver name: [" << drinfo.name <<
"]\n";;
398 std::cerr <<
"Software fallback: [";
400 if (drinfo.flags & SDL_RENDERER_SOFTWARE)
401 std::cerr <<
"yes]\n";
else std::cerr <<
"no]\n";
403 std::cerr <<
"Hardware acceleration: [";
405 if (drinfo.flags & SDL_RENDERER_ACCELERATED)
406 std::cerr <<
"yes]\n";
else std::cerr <<
"no]\n";
408 std::cerr <<
"Vsync with refresh rate: [";
409 if (drinfo.flags & SDL_RENDERER_PRESENTVSYNC)
410 std::cerr <<
"yes]\n";
else std::cerr <<
"no]\n";
412 std::cerr <<
"Rendering to texture support [";
414 if (drinfo.flags & SDL_RENDERER_TARGETTEXTURE)
415 std::cerr <<
"yes]\n";
else std::cerr <<
"no]\n";
417 cerr <<
"--------------------------------------------------------------------------------\n\n";
437 PColor* bgColor =
nullptr;
459 int result= SDL_SetRenderDrawColor(
mRenderer,
477 std::cerr <<SDL_GetError() << endl;
483 std::list<PWidget *>::iterator p =
mSubWidgets.end();
495 if((*p)->IsVisible())
505#ifdef PEBL_EMSCRIPTEN
531 unsigned int cyclesleft = cycles;
532 unsigned int tstart = SDL_GetTicks();
534 while(cyclesleft > 0 )
545 unsigned int tend = SDL_GetTicks();
547 result = tend-tstart;
564 mSurface = SDL_SetVideoMode(w,h,(
int)vDp,mFlags);
This class has got everything you need to evaluate stuff.
static VariableMap gGlobalVariableMap
counted_ptr< PEBLObjectBase > GetObject() const
Variant GetProperty(std::string) const
bool Exists(const std::string &varname)
void AddVariable(const std::string &varname, const Variant &val)
Variant RetrieveValue(const std::string &varname)
std::string GetString() const
PComplexData * GetComplexData() const
Variant TimeStamp(Variant v)
void SignalFatalError(const std::string &message)
Variant GetDriverList(bool printout=true)
int WritePNG(SDL_Renderer *renderer, SDL_Rect *rect, const std::string fname)