public void updateTextureMatrix(final Texture texture) { final Matrix4 texMat = Matrix4.fetchTempInstance(); updateTextureMatrix(texMat); texture.setTextureMatrix(texMat); Matrix4.releaseTempInstance(texMat); }
/** * Fill the buffer with the transforms and return it */ protected FloatBuffer fillTransformBuffer() { _primCount = Math.min(_visibleMeshes.size(), _maxBatchSize); final int nrOfFloats = _primCount * 16; /* 16 floats per matrix */ // re-init buffer when it is too small of more than twice the required size if (_transformBuffer == null || nrOfFloats > _transformBuffer.capacity()) { _transformBuffer = BufferUtils.createFloatBuffer(nrOfFloats); } _transformBuffer.rewind(); _transformBuffer.limit(nrOfFloats); final Matrix4 mat = Matrix4.fetchTempInstance(); for (int i = 0; i < _maxBatchSize && _meshesToDraw > 0; i++) { final Mesh mesh = _visibleMeshes.get(--_meshesToDraw); final Matrix4 transform = mesh.getWorldTransform().getHomogeneousMatrix(mat); transform.toFloatBuffer(_transformBuffer, false); } Matrix4.releaseTempInstance(mat); _transformBuffer.rewind(); return _transformBuffer; }
/** * Fill the buffer with the transforms and return it */ protected FloatBuffer fillTransformBuffer() { _primCount = Math.min(_visibleMeshes.size(), _maxBatchSize); final int nrOfFloats = _primCount * 16; /* 16 floats per matrix */ // re-init buffer when it is too small of more than twice the required size if (_transformBuffer == null || nrOfFloats > _transformBuffer.capacity()) { _transformBuffer = BufferUtils.createFloatBuffer(nrOfFloats); } _transformBuffer.rewind(); _transformBuffer.limit(nrOfFloats); final Matrix4 mat = Matrix4.fetchTempInstance(); for (int i = 0; i < _maxBatchSize && _meshesToDraw > 0; i++) { final Mesh mesh = _visibleMeshes.get(--_meshesToDraw); final Matrix4 transform = mesh.getWorldTransform().getHomogeneousMatrix(mat); transform.toFloatBuffer(_transformBuffer, false); } Matrix4.releaseTempInstance(mat); _transformBuffer.rewind(); return _transformBuffer; }
@Override public void computeNormalMatrix(final boolean modelIsUniformScale) { final Matrix3 normal = Matrix3.fetchTempInstance(); final FloatBuffer dst = _matrixStore.get(RenderMatrixType.Normal); dst.clear(); final Matrix4 model = Matrix4.fetchTempInstance(); final FloatBuffer modelBuff = _matrixStore.get(RenderMatrixType.Model); modelBuff.clear(); model.fromFloatBuffer(modelBuff); if (modelIsUniformScale) { // normal matrix is just the 3x3 of the model matrix model.toMatrix3(normal); } else { // normal matrix is the inverse transpose of the 3x3 model matrix model.toMatrix3(normal); try { normal.invertLocal().transposeLocal(); } catch (final ArithmeticException ex) { // silently ignore for now - non invertable } } normal.toFloatBuffer(dst); } }
final Matrix4 workingMat = Matrix4.fetchTempInstance(); final Matrix4 finalMat = Matrix4.fetchTempInstance(); finalMat.setIdentity(); for (final Element transform : transforms) {
final Matrix4 workingMat = Matrix4.fetchTempInstance(); final Matrix4 finalMat = Matrix4.fetchTempInstance(); finalMat.setIdentity(); for (final TransformElement transform : transforms) {
final Matrix4 matTemp = Matrix4.fetchTempInstance(); matTemp.set(mat4); assertEquals(mat4, matTemp);