Monthly Archives: March 2012

Mike 3.8.2012

  • Fixed the excel export issue this morning at site
  • Briefing with Jim Griffe and other this morning about the Vis Tool, preparing for Colonel Dukes demo
    • We need to prepare a slide that illustrates how to “examine the historical performance” of a project
    • A short and sweet quickstart guide for PPA would be nice as well
  • Working on a quick start guide for PPA

Phil 3.8.12

7:30 – 11:00 VISIBILITY

  • Demo prep. See Mike’s notes for more detail

11:00 – 4:00 FP

  • Now that I have the pick matrix worked out, I’m going to see how to ask the pipeline if any pixels have been drawn. Also need to see how to prevent the test drawing from going to the render buffer
  • Generating query indices and deleting them in cleanup()
  • Added a pickRender()  and pickResult() method to DrawableObject
  • Picking works, but seems to slow down the display. Also, GL_QUERY_RESULT_AVAILABLE always returns zero, even if there is a result. And just to make things a little weirder, the call glGetQueryObjectiv(drawQuery, GL_QUERY_RESULT_AVAILABLE, &result) does not slow down the display, but the following almost identical call glGetQueryObjectiv(drawQuery, GL_QUERY_RESULT, &result) does. No ideas about this right now.

 

Here’s the code in question

static enum TRANSFORM_MODE{UNAVAILABLE, HIT, MISS};
TRANSFORM_MODE pickResult(){
	GLint result;

	glGetQueryObjectiv(drawQuery, GL_QUERY_RESULT_AVAILABLE, &result);
	if(result == 0)
		return UNAVAILABLE; // always returns this

	glGetQueryObjectiv(drawQuery, GL_QUERY_RESULT, &result); // slows down rendering once called.
	if(result)
		return HIT;
	else
		return MISS;
};

Tom DeVito 3.7.2012

Start: 10:00

  • Added voltage regulator circuit to the schematic.
  • I couldn’t do the amps circuit one sided so I had to add the bottom layer.
  • The I2C rheostats have two jumpers to select addresses.
  • Realized that the circuits are going to be bigger then their footprint because of the mounting board.  Added space so this should be okay.
  • I still have to work out a couple things with the amps but I am almost done.  Once I am done I will test the circuit using the power adapter as a power supply to make sure it works and double check everything before ordering.

End: 6:00

Dong Shin 03.07.2012

  • prepping for demo and found some problems
    • Project Assistant Tutorial button not very button-like – fixed
    • need to take a look at ProjectAssistant.html inside to correct Flash Player download problem and eliminate auto-resize/scroll issues
    • max_allowed_packet error occurred – need to modify MySQL ini file to allow more than 1M
    • xml file creation/writing skips when max_allowed_packet error occurs. moved the code outside of the try-catch block.
  • Mavenized ResizeableControls and modified ProjectAssistant to use it instead of local reference.

Mike 3.7.2012

  • Regular morning backups
  • Imported a new visibility scripting that writes to a file instead of a servlet
  • Ran the scripts on the current PPM data and published them to the data navigator
  • Worked with Phil and Dong to create several slides for tomorrow’s predemo
  • We ran in to an error when trying to load saved views, it was resolved when I closed IE and reopened it.  We believe it has to do with trying to load a table that was created after logging in.
  • Resolved the excel export error

Phil 3.7.12

8:00 – 12:00 visibility

  • Spent the morning putting together a demo walkthrough for tomorrow. We build an ‘enhanced’ data set that would support a lot of queries and started to use it to prepare a slideshow. Got through two slides until we discovered that slides weren’t loading properly.
  • The help for Project Assistant is a bit overwhelming. There needs to be some kind of overview and quickstart.
  • There are some issues on Project Assistant that need to be worked.
    • The help on the main screen and the dialog aren’t the same, and don’t look like buttons.
    • The app does not resize when the browser window resizes. It holds onto it’s original size, regardless.
  • Data Navigator’s ‘browser tab title’ is showing up as ‘#’ again.
  • It is possible to save two desktops with identical names

12:00 – 5:30FP

  • My FB account got hacked! Had to spend some time changing passwords and telling people to ignore my ‘hi ERROR!’ message. No idea how that could have happened…
  • Got the projection matrix set up for picking. Here’s how you do it:
void Gl_ShaderWindow::setPickMatrix(GLdouble x, GLdouble y, GLdouble deltax, GLdouble deltay, GLint viewport[4])
 {
	projectionMatrix.PushMatrix();
	if (deltax <= 0 || deltay <= 0) {
 		return;
 	}
	projectionMatrix.LoadIdentity();
	/* Translate and scale the picked region to the entire window */
 	projectionMatrix.Translate((viewport[2] - 2 * (x - viewport[0])) / deltax, (viewport[3] - 2 * (y - viewport[1])) / deltay, 0);
 	projectionMatrix.Scale(viewport[2] / deltax, viewport[3] / deltay, 1.0);
	projectionMatrix.MultMatrix(viewFrustum.GetProjectionMatrix());
 }

 

Tom DeVito 3.6.2012

Start: 10:00

  • Took me a while to figure out where the power jack footprint was in the pad2pad software.  I ended up having to drag it in from the folder as I couldn’t find where it was in the UI.
  • Apparently there are two types of power jacks.  I have to make sure we get the one where the center pin is positive.  Some have negative pins
  • Did an experiment with testing currents of both the power supply and our AC adapters.  i = V/R and the resistance formulas seems like a simple enough equations but somehow I missed the concept behind it.  Basically current is more like a pull caused by the lack of resistance.  The load resistor is what pulls current into the loop.  This could technically be anywhere in the circuit but the placement can have a great affect on what you are trying to do.  In the case of my test circuit, this resistor is right before the LED in order to protect it from getting too much current.  If I branch off from the node where the positive terminal of this resistor starts and add another circuit in parallel, this does not change the properties of the loop with the LED in it but makes the current pulled by the entire circuit with the new branch increase.
  • A key concept I keep forgetting is that current flows from negative to positive.  This means that a load resistor on the positive side of a circuit is  not really preventing power from going in, but pulling it from the negative side in.
  • Started drawing the circuit for the reheostats and the pre-amps.

End: 6:00

Mike 3.6.2012

  • Usual Backups
  • Tried to get Colonel Dukes presentation, still no access
  • Tried to do some mandatory training from TASC I just received, can’t complete because my name is not in the system
  • Worked some more on the CASPORT production migration
  • Trying to resolve the issue of the server not being able to make HTTPS requests of iteself
  • Dong rewrote a part of VisibilityScripting to write to a file instead of a servlet which got around the issue.  I’ll deploy it tomorrow.

Phil 3.6.12

8:00 – 3:30 FP

  • Uniform Buffer Objects! Whee!
    • Urk: “Any type consuming N bytes in a buffer begins on an N byte boundary within that buffer. That means that standard GLSL types such as int, float, and bool (which are all defined to be 32-bit or four-byte quantities) begin on multiples of four bytes. A vector of these types of length two always begins on a 2N byte boundary. For example, that means a vec2, which is eight bytes long in memory, always starts on an eight-byte boundary. Three- and four-element vectors always start on a 4N byte boundary; so vec3 and vec4 types start on 16-byte boundaries. Each member of an array of scalar or vector types (ints or vec3s, for example) always start boundaries defined by these same rules, but rounded up to the alignment of a vec4. In particular, this means that arrays of anything but vec4 (and Nx4 matrices) won’t be tightly packed, but instead there will be a gap between each of the elements. Matrices are essentially treated like short arrays of vectors, and arrays of matrices are treated like very long arrays of vectors. Finally, structures and arrays of structures have additional packing requirements; the whole structure starts on the boundary required by its largest member, rounded up to the size of a vec4.
    • Need to write up a class that handles shared objects. Should be a variant on the dictionary pattern
      • DataElement class includes name, type, size, etc
      • UniformBlock class
        • Defines the name of the Uniform Block
        • Makes sure that there is room for this block, and the binding
          glGetIntegerv(GL_MAX_UNIFORM_BUFFERS)
          glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS)
        • allocates the memory
        • gets the block index
          glGetUniformBlockIndex(GLuint program, const GLchar * uniformBlockName);
        •  returns pointers to data
        • handles the writes into memory
        • bind to the shader program (I think)
          void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
  • Advanced Geometry Management (Chapter 12)
    • Queries (picking, hopefully)
      • Questions in OpenGL are represented by query objects, and much like any other object in OpenGL, query objects must be reserved, or generated. To do this, call glGenQueries, passing it the number of queries you want to reserve and the address of a variable (or array) where you would like the names of the query objects to be placed:
        void glGenQueries(GLsizei n, GLuint *ids)
        Gluint myQueries[10];
        glGenQueries(10, myQueries);
        for(int i = 0; i < 10; ++i){
            if(myQueries[i] == 0)
                // throw an error
        }
        // run queries
        glBeginQuery(GL_ANY_SAMPLES_PASSED, myQueries);
        glEndQuery(GL_ANY_SAMPLES_PASSED);
        
        // usually this should be available immediately, but be careful to handle the case if it isn't
        glGetQueryObjectuiv(myQueries[0], GL_QUERY_RESULT_AVAILABLE, &result);
        if(result == GL_TRUE)
            glGetQueryObjectuiv(myQueries[0], GL_QUERY_RESULT, &result);
        // do something based on the result
        // then when done...
        glDeleteQueries(10, myQueries); // free up space for more queries
      • So the way picking would seem to work would be to set the viewport so that it’s slightly larger than the cursor, then render bounding boxes (using glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)) inside a loop of questions, then read back (and wait for) the results of the question. If the object is visible in the small FOV, then we can regard it as picked.
        • Setting up picking:
          	GLint viewport[4];
          	float ratio;
          
          	glSelectBuffer(BUFSIZE,selectBuf);
          
          	glGetIntegerv(GL_VIEWPORT,viewport);
          
          	glRenderMode(GL_SELECT);
          
          	glInitNames();
          
          	glMatrixMode(GL_PROJECTION);
          	glPushMatrix();
          	glLoadIdentity();
          
          	gluPickMatrix(cursorX,viewport[3]-cursorY,5,5,viewport);
          	ratio = (viewport[2]+0.0) / viewport[3];
          	gluPerspective(45,ratio,0.1,1000);
          	glMatrixMode(GL_MODELVIEW);
        • The source for gluPerspective() is here
      • Another way of doing picking – http://www.gpucomputing.net/sites/default/files/110606_picking_1.pdf

Tom DeVito 3.5.2012

Start: 10:15

  • Continued working on drawing out the circuit board.  I think I can do this one sided but if not I can definitely do it with two sides.  The cost doesn’t go up much unless you use the 2 internal layers.
  • Finished drawing the sensor circuits and added ports for the varios wire groups coming in and out of the board.
  • Just a reminder because I think I forgot to mention this in earlier entries.  Each board supports 2 fingers, so one board will only have half the components on it.  The reason for this is the rheostat is I2c.  I2c protocol only allows 4 addresses for slave devices.  Another reason this works out is our high powered amplifiers are stereo.
  • Phil suggested using barrel plugs for the power.  I figure if we are going to do this, we might as well have one power input and regulate the power on the circuits that require 5v.
  • I tested a circuit for a LM7905 Voltage Regulator.  The surface mounted ones use a metal plate to increase heat conductivity with the pcb board allowing for much smaller packaging.
  • The 5V circuit will be running parallel to the 12V amplifier.  There are two things that need to be considered to make this work in a robust manner.  First a load resistor will have to be added to the 5 volt side to bring the current going in down to 1 Amp which is the operating capacity of the voltage regulator.  Second, I have to worry about what will happen if the amp suddenly stops working causing a surge of power to the regulator.  I believe a RC circuit to ground resolves this problem.

End:6:15

Mike 3.5.2012

  • Scanned in new test versions of the various visibility parts.
  • The AccountManagers I moved to PPM and compiled last Friday worked!
  • Also, modifying all the compiler settings to match those of PPM worked as well.
  • Usual backups this morning.
  • Answered several emails concerning stuff like “what is visibility?”
  • Resolved the IAVA patch errors
  • Attempted to locate the ISR PMO presentation from last week, apparently it is in a folder i don’t have permission to view
  • Rebuilt visibility, account managers, and ingest manager with the new compiler settings, will deploy tomorrow
  • Went back to site and deployed the rebuilt applications.  Everything works except for one small thing:
    • VisibilityScripting publishes an xml file on the server.  IngestManager can then import that file in to the Visibility database.  However with the current server set up, the validate URL fails.  I’m guessing because of certificate errors.

Phil 3.5.12

8:00 – 9:30 VISIBILITY

  • Checking up on email, trying to get access to the presentation slides for the demo, etc. I won’t steal Mikes thunder about progress with getting VISIBILITY swfs running

9:30 – 4:30 FP

  • Advanced Shaders (Chapter 11)
    • Geometry shaders run once per primitive. This means that it’ll run once per point for GL_POINTS; once per line for GL_LINES, GL_LINE_STRIP, and GL_LINE_LOOP; and once per triangle for GL_TRIANGLES, GL_TRIANGLE_STRIP, and GL_TRIANGLE_FAN.
    • GL_LINES_ADJACENCY, GL_LINE_STRIP_ADJACENCY, GL_TRIANGLES_ADJACENCY, and GL_TRIANGLE_STRIP_ADJACENCY allow the geometry shader to get at the vertices that are adjacent to the particular piece of geometry that we’re interested in. I’d assume  that we can also manipulate those pieces, though I’m not sure that’s a good idea.
    • Convolution filters can be generated as a texture (even an image), and then used to modify what’s being rendered. For example, the following should be usable as a blur filter, assuming that the weights add up to 1.0 (which could be done as a pre-processing pass on the data before the texture is made):
    • Got the demo that uses a fragment shader to draw a Julia Set kind of working.
    • Tried to start Uniform Buffer Objects, but discovered that my brain was full.

Tom DeVito 3.2.2012

Start: 10:00

  • After a lot of fiddling around, I finally figured out how to group and space things in the pad2pad software.
  • Printed out the locations of the standoffs to make sure that everything will fit properly.
  • Started planning out the traces.  I need a 12 volt power source for the large amplifiers.  All the rest run on 5 volts.

End 6:00

Mike 3.2.12

  • Usual daily server and DB backups
  • Tested the rebuilt versions of ConnectionTest and Visibility, no good
  • Lots of emails inside to keep me busy doing non-development
  • Back at the office I am trying to match all compiler and library settings between PPM and Visibility as much as possible
  • Moved a copy of AccountManagers to the PPM project and compiled it
  • Copied some of the Visibility Documentation to a CD so I can answer some of the questions from curious people inside more quickly