Things maybe to do... [ ] Streamline image processing with framebuffer, 2 triangles geo/part/gaud, inputs including pixel size [X] Logging arrangement including, logSometing(), and quitIfTheresBeenAnyErrorsSoFar() to call after init [*] Ability to enforce draw ordering of different materials (perhaps with MeIMaterial->getDrawOrder) Added renderworld draw steps [X] Allow materialGl to control its blend func [X] Allow materialGl to control its culling policy ... [ ] Later, let MeWorld orchestrate HamUpdates, observer notifications, and multiple renderworlds ...renderworlds would be drawn if they have an observable display part. keen. reset glBindFrameBuffer(GL_FRAMEBUFFER, 0) to reset default dest. (SDL2 for example needs this) [ ] Where to put Gaud-ey utilities like "make texture-copier" (compositing) [X] Adding the library components is hard. Can make it framework or library dependency? [X] On Material, enable alpha blending or other modes. [X] On Texture, add switch for interpolate [ ] On Texture, add switch for wrap [X] Where does initial setup (glDepth, &c) go? [Turns out, glDepthRange(0,1) should just be left as-is. Cant go bigger than 1.] [X] Create inverse list of all GL constants to string, for debug & printing. [ ] Do a directional-light shader [X] Do a refraction shader with rear-passthrough, maybe some rainbowing... and orchestrate the backbuffer availability. [ ] As part of drawing (World?) track some metadata about the frame. Be able to superimpose the list of shader used, &c. [ ] Precompute most of transformationMatrix per frame, so that eyePos isn't passed in, and depth scalery is common for all shaders in a scene. [X] Do a "sky box" single-shader, across whole rect. Should need camera matrix & eyePos only. Question -- what transfer mode? "blast" mode, dont test z, dont write z. [ ] Object picking with mouse [ ] Let "draw" accept a range of gauds. override materials? [*] Should MeRenderWorld handle the buffer chains & ordering for complex materials? maybe maybe! Added renderworld draw steps [ ] Allow #include on texture loads [ ] System for rendering text is needed. [ ] Replace uniform yRatio with vec2 bufferDimensions ? [X] Why do my normals-colors have gradations on my cubes? should be same value across... A: becase makeboxgeo randomized 'em! [ ] Scene-graph-like features in MeGaud? to make some parts geometrically dependents of others. [X] Run M03 without any errors. [X] Figure out SDL2's keyboarding (shift-A and stuff) [ ] Build a MeHam for text display BUGS [X] apparently need to set partAttrs immediately on Part, otherwise, later gaud-sets won't stick right. MePart *pa = new MePart(this->material, cubesGe); pa->setPartAttribute("xform1",MeVec4(1,0,0,0)); pa->setPartAttribute("xform2",MeVec4(0,1,0,0)); pa->setPartAttribute("xform3",MeVec4(0,0,1,0)); pa->setPartAttribute("xform4",MeVec4(0,0,0,1)); :: fixed by assigning these from the IMaterial part list. 2014-12-26 [X] Sometimes the refraction texture gets stuck on some colored squares, not the actual backdrop... ??? :: fixed, was a bug in matching texture units to textures [ ] For texture2D.vsh, setting for depth front/back (maybe just Z value) [ ] for textConsole.fsh, setting for transparency/color ... something. [ ] MeFile needed. especially for tests and deleting, but other stuff too. [ ] MeTime needed, for platform-specific tick or timer time measurement. (underneath SDL2, down lower) [ ] Does MeRenderWorld need something about pixel dimensions? USAGE NOTES For visibility, be sure to: * set all necessary uniforms (eyePos, cameraMatrix, objectMatrix, yRatio) * set all necessary partattrs (xform1..4) ------ Renderworld composite stack notes "list" of renders Material and destination buffer destination buffer can be draw() destination, or internal node assign internal node to sampler uniform of a material ops: CLEAR_BUFFER(bufferName) blank name is requested output DRAW(material, bufferName) SET_TEXTURE_COLOR(bufferName, material, samplerUniformName) SET_TEXTURE_DEPTH(bufferName, material, samplerUniformName) emit dotty graph of a chain enable/disable specific materials replace specific materials ------ learnings. 2015-01-10 I had a bug where meGlSetTextureUniform(this->program, pair.first.c_str(), textureName) was called spuriously, twice for each frame with different values, but only the second actually mattered. Caused a big CPU stall! std::map wont track by unique strings. :) used std::string instead. Similarly, in MePartRendererGl, the partValues gets reassigned if material is used on a different set of geometry. ------- 2015-01-23 friday notes about world data build world from description: list of things to instantiate --thingname, thing params MeThingManager addThingType thingType.getThingAttributeDescriptions type, name, display hints read/write/both thingType.allocateLocalStorage thingType. ...do various things...(here's your local storage) thingType.initialize with attribute values map thingType.get/set individual attribute values thingType.freeLocalStorage & otherwise clean up for recording/playback, need only the graphical parts, not the behaviors geometry & material libraries to mix and match per Thing (at least for physical objects) attributes to represent list of parts(geometries) + materials data-driven gatherer of geometries -- some directly loaded, some programmatically constructed [ ] need a way to programmatically associate MeThings with each other, maybe a MeThing.setValueThingref [ ] need a way to get materials by name, perhaps from a resource manager concept [ ] Make sure MeThing definitions can share bases, to mix and match them [ ] Standardize a way to express position/rotation, so we stop catting matrices always alla the time. (ideally fast enough for vertex shader to do.) [ ] Stress test with live GL. Screens project doesnt pound on create/destroy very much... [ ] Able to resize the RenderWorld (intermediate buffers need resizing too) [ ] BUG with MeIMaterial AddMode? starfield disappeared and stuff. [ ] Tweening API, that only ticks the ones that need it, with callbacks or pollable for "do i need to update" [ ] Stress the adding-removing part list features. Currently, removing is very slow, with a long, long ripple. [ ] MeCollisionVolume has priorities. Need way to mark as "immovable", for walls (and allow intersection). Priority==0? [ ] MeCollisionVolume ways for special handling? [ ] Allow new MePart(m, g) where g geometry is shared by several Parts. Maybe Part needs shared_ptr. [ ] 2015-02-26 Hey, could use MIDI input for the editor and stuff. Knobs and keys, it would also play well in the demo scene. ----- 2015-02-28 moving the attribute name lists OUT of each part, and into MeRenderParts before: M03 after startup: 1.07 GB, visiting all screens: 1.46 GB 888 after removing partAttrsByIndex from part.h, reduced to 1.06/1.45 (minor reduction. trivial)