本文整理汇总了Java中com.jogamp.opengl.GL2GL3.glUseProgram方法的典型用法代码示例。如果您正苦于以下问题:Java GL2GL3.glUseProgram方法的具体用法?Java GL2GL3.glUseProgram怎么用?Java GL2GL3.glUseProgram使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类com.jogamp.opengl.GL2GL3
的用法示例。
在下文中一共展示了GL2GL3.glUseProgram方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: init
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public static void init(Renderer r, GL2GL3 gl) {
int[] is = new int[1];
gl.glGenBuffers(1, is, 0);
_vertBuffer = is[0];
Shader s = r.getShader(ShaderHandle.DEBUG);
_progHandle = s.getProgramHandle();
gl.glUseProgram(_progHandle);
_modelViewMatVar = gl.glGetUniformLocation(_progHandle, "modelViewMat");
_projMatVar = gl.glGetUniformLocation(_progHandle, "projMat");
_colorVar = gl.glGetUniformLocation(_progHandle, "color");
_cVar = gl.glGetUniformLocation(_progHandle, "C");
_fcVar = gl.glGetUniformLocation(_progHandle, "FC");
_posVar = gl.glGetAttribLocation(_progHandle, "position");
_hasInitialized = true;
}
示例2: useShader
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public void useShader(GL2GL3 gl) {
if (_status != ShaderStatus.GOOD) {
assert(false);
}
gl.glUseProgram(_progHandle);
}
示例3: initUniforms
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void initUniforms(Renderer renderer, Mat4d modelViewMat, Mat4d projMat, Mat4d viewMat, Mat4d normalMat) {
GL2GL3 gl = renderer.getGL();
lightsDirScratch[0].mult4(viewMat, lightsDir[0]);
lightsDirScratch[1].mult4(viewMat, lightsDir[1]);
lightsDirFloats[0] = (float)lightsDirScratch[0].x;
lightsDirFloats[1] = (float)lightsDirScratch[0].y;
lightsDirFloats[2] = (float)lightsDirScratch[0].z;
lightsDirFloats[3] = (float)lightsDirScratch[1].x;
lightsDirFloats[4] = (float)lightsDirScratch[1].y;
lightsDirFloats[5] = (float)lightsDirScratch[1].z;
for (int i = 0; i < usedShaders.length; ++i) {
int shaderID = usedShaders[i];
ShaderInfo si = sInfos[shaderID];
gl.glUseProgram(si.meshProgHandle);
gl.glUniformMatrix4fv(si.modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(si.projMatVar, 1, false, RenderUtils.MarshalMat4d(projMat), 0);
gl.glUniformMatrix4fv(si.normalMatVar, 1, false, RenderUtils.MarshalMat4d(normalMat), 0);
gl.glUniform3fv(si.lightDirVar, 2, lightsDirFloats, 0);
gl.glUniform1fv(si.lightIntVar, 2, lightsInt, 0);
gl.glUniform1i(si.numLightsVar, numLights);
gl.glUniform1f(si.cVar, Camera.C);
gl.glUniform1f(si.fcVar, Camera.FC);
}
}
示例4: render
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public void render(int contextID, Renderer renderer, Camera cam) {
if (textureURI == null) {
return;
}
if (!isLoaded) {
loadGPUAssets(renderer);
}
if (!VAOMap.containsKey(contextID)) {
setupVAO(contextID, renderer);
}
GL2GL3 gl = renderer.getGL();
int textureID = renderer.getTexCache().getTexID(gl, textureURI, false, false, false);
if (textureID == TexCache.LOADING_TEX_ID) {
// Sky box is not ready yet, get it next time
return;
}
int vao = VAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(progHandle);
gl.glUniformMatrix4fv(projMatVar, 1, false, RenderUtils.MarshalMat4d(cam.getProjMat4d()), 0);
Mat4d invViewMat = new Mat4d();
invViewMat.setRot4(cam.getTransformRef().getRotRef());
gl.glUniformMatrix4fv(invViewMatVar, 1, false, RenderUtils.MarshalMat4d(invViewMat), 0);
gl.glActiveTexture(GL2GL3.GL_TEXTURE0);
gl.glBindTexture(GL2GL3.GL_TEXTURE_2D, textureID);
// Disable mipmaps for skyboxes as the discontinuity screws them up
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_MIN_FILTER, GL2GL3.GL_LINEAR );
gl.glUniform1i(texVar, 0);
gl.glDrawArrays(GL2GL3.GL_TRIANGLES, 0, 6);
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_MIN_FILTER, GL2GL3.GL_LINEAR_MIPMAP_LINEAR );
gl.glBindVertexArray(0);
}
示例5: renderImp
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void renderImp(int contextID, Renderer renderer, Camera cam, Ray pickRay) {
if (!staticInit) {
initStaticBuffers(renderer);
}
GL2GL3 gl = renderer.getGL();
int textureID = _texLoader.getTexID(renderer);
if (textureID == TexCache.LOADING_TEX_ID) {
return; // This texture is not ready yet
}
if (!VAOMap.containsKey(contextID)) {
setupVAO(contextID, renderer);
}
int vao = VAOMap.get(contextID);
gl.glBindVertexArray(vao);
Mat4d modelViewMat = new Mat4d();
cam.getViewMat4d(modelViewMat);
modelViewMat.mult4(_trans.getMat4dRef());
modelViewMat.scaleCols3(_scale);
Mat4d normalMat = RenderUtils.getInverseWithScale(_trans, _scale);
normalMat.transpose4();
gl.glUseProgram(progHandle);
gl.glUniformMatrix4fv(modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(projMatVar, 1, false, RenderUtils.MarshalMat4d(cam.getProjMat4d()), 0);
gl.glUniformMatrix4fv(normalMatVar, 1, false, RenderUtils.MarshalMat4d(normalMat), 0);
gl.glUniformMatrix4fv(bindSpaceMatVar, 1, false, identMat, 0);
gl.glUniformMatrix4fv(bindSpaceNorMatVar, 1, false, identMat, 0);
gl.glUniform1f(cVar, Camera.C);
gl.glUniform1f(fcVar, Camera.FC);
gl.glUniform1i(numLightsVar, 1);
gl.glUniform3fv(lightDirVar, 1, lightDir, 0);
gl.glUniform1fv(lightIntVar, 1, lightInt, 0);
gl.glUniform3f(ambientColorVar, 0.0f, 0.0f, 0.0f);
gl.glUniform3f(specColorVar, 0.0f, 0.0f, 0.0f);
gl.glUniform1f(shininessVar, 1.0f);
gl.glActiveTexture(GL2GL3.GL_TEXTURE0);
gl.glBindTexture(GL2GL3.GL_TEXTURE_2D, textureID);
gl.glUniform1i(texVar, 0);
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_WRAP_S, GL2GL3.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_WRAP_T, GL2GL3.GL_CLAMP_TO_EDGE);
// Draw
gl.glDisable(GL2GL3.GL_CULL_FACE);
gl.glDrawArrays(GL2GL3.GL_TRIANGLES, 0, 6);
gl.glEnable(GL2GL3.GL_CULL_FACE);
gl.glBindVertexArray(0);
}
示例6: render
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
@Override
public void render(int contextID, Renderer renderer,
double windowWidth, double windowHeight, Camera cam, Ray pickRay) {
if (!staticInit) {
initStaticBuffers(renderer);
}
double x = _x;
double y = _y;
if (_alignRight) {
x = windowWidth - _x - _width;
}
if (!_alignBottom) {
y = windowHeight - _y - _height;
}
GL2GL3 gl = renderer.getGL();
int textureID = renderer.getTexCache().getTexID(gl, _imageURI, _isTransparent, _isCompressed, false);
if (textureID == TexCache.LOADING_TEX_ID) {
return; // This texture is not ready yet
}
if (!VAOMap.containsKey(contextID)) {
setupVAO(contextID, renderer);
}
int vao = VAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(progHandle);
gl.glUniform1i(hasTexVar, 1);
gl.glActiveTexture(GL2GL3.GL_TEXTURE0);
gl.glBindTexture(GL2GL3.GL_TEXTURE_2D, textureID);
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_WRAP_S, GL2GL3.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL2GL3.GL_TEXTURE_2D, GL2GL3.GL_TEXTURE_WRAP_T, GL2GL3.GL_CLAMP_TO_EDGE);
gl.glUniform1i(texVar, 0);
if (_isTransparent) {
gl.glEnable(GL2GL3.GL_BLEND);
gl.glBlendEquationSeparate(GL2GL3.GL_FUNC_ADD, GL2GL3.GL_MAX);
gl.glBlendFuncSeparate(GL2GL3.GL_SRC_ALPHA, GL2GL3.GL_ONE_MINUS_SRC_ALPHA, GL2GL3.GL_ONE, GL2GL3.GL_ONE);
}
// Set the size and scale in normalized (-1, 1) coordinates
double normX = x / (0.5 * windowWidth) - 1;
double normY = y / (0.5 * windowHeight) - 1;
double normWidth = _width / (0.5 * windowWidth);
double normHeight = _height / (0.5 * windowHeight);
gl.glUniform2f(offsetVar, (float)normX, (float)normY);
gl.glUniform2f(sizeVar, (float)normWidth, (float)normHeight);
// Draw
gl.glDisable(GL2GL3.GL_CULL_FACE);
gl.glDrawArrays(GL2GL3.GL_TRIANGLES, 0, 6);
gl.glEnable(GL2GL3.GL_CULL_FACE);
if (_isTransparent) {
gl.glDisable(GL2GL3.GL_BLEND);
}
}
示例7: setupVAO
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void setupVAO(int contextID, Renderer renderer, int progHandle, int vertexBuffer, int indexBuffer) {
GL2GL3 gl = renderer.getGL();
int vao = renderer.generateVAO(contextID, gl);
_vaoMap.put(contextID, vao);
gl.glBindVertexArray(vao);
gl.glUseProgram(progHandle);
int posVar = gl.glGetAttribLocation(progHandle, "position");
gl.glEnableVertexAttribArray(posVar);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, vertexBuffer);
gl.glVertexAttribPointer(posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
gl.glBindBuffer(GL2GL3.GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.glBindVertexArray(0);
}
示例8: setupVAOForSubMeshImp
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void setupVAOForSubMeshImp(int contextID, int shaderID, SubMesh sub, Renderer renderer) {
GL2GL3 gl = renderer.getGL();
int vao = renderer.generateVAO(contextID, gl);
sub.vaoMaps[shaderID].put(contextID, vao);
gl.glBindVertexArray(vao);
int progHandle = sInfos[shaderID].meshProgHandle;
gl.glUseProgram(progHandle);
int texCoordVar = gl.glGetAttribLocation(progHandle, "texCoord");
// For some shaders the texCoordVar may be optimized away
if (texCoordVar != -1) {
if (sub._texCoordBuffer != 0) {
// Texture coordinates
gl.glEnableVertexAttribArray(texCoordVar);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, sub._texCoordBuffer);
gl.glVertexAttribPointer(texCoordVar, 2, GL2GL3.GL_FLOAT, false, 0, 0);
} else {
gl.glVertexAttrib2f(texCoordVar, 0, 0);
}
}
int posVar = gl.glGetAttribLocation(progHandle, "position");
gl.glEnableVertexAttribArray(posVar);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, sub._vertexBuffer);
gl.glVertexAttribPointer(posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
// Normals
int normalVar = gl.glGetAttribLocation(progHandle, "normal");
gl.glEnableVertexAttribArray(normalVar);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, sub._normalBuffer);
gl.glVertexAttribPointer(normalVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
if (!flattenBuffers) {
gl.glBindBuffer(GL2GL3.GL_ELEMENT_ARRAY_BUFFER, sub._indexBuffer);
}
gl.glBindVertexArray(0);
}
示例9: setupVAOForSubLine
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void setupVAOForSubLine(int contextID, SubLine sub, Renderer renderer) {
GL2GL3 gl = renderer.getGL();
int vao = renderer.generateVAO(contextID, gl);
sub.vaoMap.put(contextID, vao);
gl.glBindVertexArray(vao);
int prog = sub._progHandle;
gl.glUseProgram(prog);
int posVar = gl.glGetAttribLocation(prog, "position");
gl.glEnableVertexAttribArray(posVar);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, sub._vertexBuffer);
gl.glVertexAttribPointer(posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
gl.glBindVertexArray(0);
}
示例10: init
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public static void init(Renderer r, GL2GL3 gl) {
for (int i = 0; i < Renderer.NUM_MESH_SHADERS; ++i) {
ShaderInfo si = new ShaderInfo();
sInfos[i] = si;
si.meshProgHandle = r.getMeshShader(i).getProgramHandle();
gl.glUseProgram(si.meshProgHandle);
// Bind the shader variables
si.modelViewMatVar = gl.glGetUniformLocation(si.meshProgHandle, "modelViewMat");
si.projMatVar = gl.glGetUniformLocation(si.meshProgHandle, "projMat");
si.bindSpaceMatVar = gl.glGetUniformLocation(si.meshProgHandle, "bindSpaceMat");
si.bindSpaceNorMatVar = gl.glGetUniformLocation(si.meshProgHandle, "bindSpaceNorMat");
si.normalMatVar = gl.glGetUniformLocation(si.meshProgHandle, "normalMat");
si.diffuseColorVar = gl.glGetUniformLocation(si.meshProgHandle, "diffuseColor");
si.ambientColorVar = gl.glGetUniformLocation(si.meshProgHandle, "ambientColor");
si.specColorVar = gl.glGetUniformLocation(si.meshProgHandle, "specColor");
si.shininessVar = gl.glGetUniformLocation(si.meshProgHandle, "shininess");
si.texVar = gl.glGetUniformLocation(si.meshProgHandle, "diffuseTex");
si.lightDirVar = gl.glGetUniformLocation(si.meshProgHandle, "lightDir");
si.lightIntVar = gl.glGetUniformLocation(si.meshProgHandle, "lightIntensity");
si.numLightsVar = gl.glGetUniformLocation(si.meshProgHandle, "numLights");
si.cVar = gl.glGetUniformLocation(si.meshProgHandle, "C");
si.fcVar = gl.glGetUniformLocation(si.meshProgHandle, "FC");
}
numLights = 2;
lightsDir[0] = new Vec4d(-0.3, -0.2, -0.5, 0.0);
lightsDir[1] = new Vec4d( 0.5, 1.0, -0.1, 0.0);
lightsDir[0].normalize3();
lightsDir[1].normalize3();
lightsInt[0] = 1f;
lightsInt[1] = 0.5f;
lightsDirScratch[0] = new Vec4d();
lightsDirScratch[1] = new Vec4d();
}
示例11: renderArmature
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public static void renderArmature(int contextID, Renderer renderer, Mat4d modelViewMat,
Armature arm, ArrayList<Mat4d> pose, Color4d color, Camera cam) {
GL2GL3 gl = renderer.getGL();
if (!_debugVAOMap.containsKey(contextID)) {
setupDebugVAO(contextID, renderer);
}
int vao = _debugVAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(_debugProgHandle);
// Setup uniforms for this object
Mat4d projMat = cam.getProjMat4d();
gl.glUniformMatrix4fv(_modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(_projMatVar, 1, false, RenderUtils.MarshalMat4d(projMat), 0);
gl.glUniform4fv(_colorVar, 1, color.toFloats(), 0);
gl.glUniform1f(_cVar, Camera.C);
gl.glUniform1f(_fcVar, Camera.FC);
ArrayList<Armature.Bone> bones = arm.getAllBones();
//Build up the list of bone vertices
Vec4d[] vects = new Vec4d[bones.size() * 2];
for (int i = 0; i < bones.size(); ++i) {
Armature.Bone b = bones.get(i);
Vec4d boneStart = new Vec4d(0, 0, 0, 1);
boneStart.mult4(b.getMatrix(), boneStart);
Vec4d boneEnd = new Vec4d(0, b.getLength(), 0, 1);
boneEnd.mult4(b.getMatrix(), boneEnd);
if (pose != null) {
// Adjust the bone by the current pose
Mat4d poseMat = pose.get(i);
boneStart.mult4(poseMat, boneStart);
boneEnd.mult4(poseMat, boneEnd);
}
vects[2*i + 0] = boneStart;
vects[2*i + 1] = boneEnd;
}
// Now push it to the card
FloatBuffer fb = FloatBuffer.allocate(vects.length * 3);
for (Vec4d v : vects) {
RenderUtils.putPointXYZ(fb, v);
}
fb.flip();
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, _lineVertBuffer);
gl.glBufferData(GL2GL3.GL_ARRAY_BUFFER, fb.limit() * 4, fb, GL2GL3.GL_STATIC_DRAW);
gl.glVertexAttribPointer(_posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, 0);
gl.glDisable(GL2GL3.GL_DEPTH_TEST);
gl.glDrawArrays(GL2GL3.GL_LINES, 0, fb.limit() / 3);
gl.glEnable(GL2GL3.GL_DEPTH_TEST);
gl.glLineWidth(1.0f);
gl.glBindVertexArray(0);
}
示例12: renderAABB
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public static void renderAABB(int contextID, Renderer renderer,
AABB aabb, Color4d color, Camera cam) {
if (aabb.isEmpty()) {
return;
}
GL2GL3 gl = renderer.getGL();
if (!_debugVAOMap.containsKey(contextID)) {
setupDebugVAO(contextID, renderer);
}
int vao = _debugVAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(_debugProgHandle);
// Setup uniforms for this object
Mat4d projMat = cam.getProjMat4d();
Mat4d modelViewMat = new Mat4d();
cam.getViewMat4d(modelViewMat);
Mat4d aabbCenterMat = new Mat4d();
aabbCenterMat.setTranslate3(aabb.center);
modelViewMat.mult4(aabbCenterMat);
modelViewMat.scaleCols3(aabb.radius);
gl.glUniformMatrix4fv(_modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(_projMatVar, 1, false, RenderUtils.MarshalMat4d(projMat), 0);
gl.glUniform4fv(_colorVar, 1, color.toFloats(), 0);
gl.glUniform1f(_cVar, Camera.C);
gl.glUniform1f(_fcVar, Camera.FC);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, _aabbVertBuffer);
gl.glVertexAttribPointer(_posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
gl.glDrawArrays(GL2GL3.GL_LINES, 0, 12 * 2);
gl.glBindVertexArray(0);
}
示例13: renderImp
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private void renderImp(int contextID, Renderer renderer,
Camera cam, Ray pickRay, GL2GL3 gl, float[] renderColour) {
if (!_VAOMap.containsKey(contextID)) {
setupVAO(contextID, renderer);
}
int vao = _VAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(_progHandle);
// Setup uniforms for this object
Mat4d projMat = cam.getProjMat4d();
Mat4d modelViewMat = new Mat4d();
cam.getViewMat4d(modelViewMat);
modelViewMat.mult4(trans.getMat4dRef());
gl.glUniformMatrix4fv(_modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(_projMatVar, 1, false, RenderUtils.MarshalMat4d(projMat), 0);
gl.glUniform1f(_cVar, Camera.C);
gl.glUniform1f(_fcVar, Camera.FC);
gl.glUniform4fv(_colorVar, 1, renderColour, 0);
if (isOutline) {
renderOutline(gl);
} else {
renderFill(gl);
}
gl.glBindVertexArray(0);
}
示例14: setupVAO
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
private static void setupVAO(int contextID, Renderer renderer) {
GL2GL3 gl = renderer.getGL();
int vao = renderer.generateVAO(contextID, gl);
_VAOMap.put(contextID, vao);
gl.glBindVertexArray(vao);
gl.glUseProgram(_progHandle);
gl.glEnableVertexAttribArray(_posVar);
gl.glBindVertexArray(0);
}
示例15: renderBox
import com.jogamp.opengl.GL2GL3; //导入方法依赖的package包/类
public static void renderBox(int contextID, Renderer renderer,
Transform modelTrans, Vec4d scale, Color4d color, Camera cam) {
GL2GL3 gl = renderer.getGL();
if (!_debugVAOMap.containsKey(contextID)) {
setupDebugVAO(contextID, renderer);
}
int vao = _debugVAOMap.get(contextID);
gl.glBindVertexArray(vao);
gl.glUseProgram(_debugProgHandle);
gl.glUniform1f(_cVar, Camera.C);
gl.glUniform1f(_fcVar, Camera.FC);
// Setup uniforms for this object
Mat4d projMat = cam.getProjMat4d();
Mat4d modelViewMat = new Mat4d();
cam.getViewMat4d(modelViewMat);
modelViewMat.mult4(modelTrans.getMat4dRef());
modelViewMat.scaleCols3(scale);
gl.glUniformMatrix4fv(_modelViewMatVar, 1, false, RenderUtils.MarshalMat4d(modelViewMat), 0);
gl.glUniformMatrix4fv(_projMatVar, 1, false, RenderUtils.MarshalMat4d(projMat), 0);
gl.glUniform4fv(_colorVar, 1, color.toFloats(), 0);
gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, _boxVertBuffer);
gl.glVertexAttribPointer(_posVar, 3, GL2GL3.GL_FLOAT, false, 0, 0);
gl.glDrawArrays(GL2GL3.GL_LINES, 0, 4 * 2);
gl.glBindVertexArray(0);
}