[SOLVED] RendererException: Attempting to upload empty buffer (limit = 0), that's an error

Hi There,

I am trying to get oceanmonkey from @ceiphren into JME3.1 (it was made in 3.0) and finally I am stuck with the following error:

The output window shows:

run:
feb 03, 2017 7:15:57 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
feb 03, 2017 7:15:58 PM com.jme3.system.JmeDesktopSystem initialize
INFO: Running on jMonkeyEngine 3.1-beta1
 * Branch: HEAD
 * Git Hash: 310f4db
 * Build Date: 2016-04-25
feb 03, 2017 7:15:59 PM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
feb 03, 2017 7:15:59 PM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: NVIDIA Corporation
 * Renderer: GeForce GTX 960/PCIe/SSE2
 * OpenGL Version: 4.5.0 NVIDIA 376.19
 * GLSL Version: 4.50 NVIDIA
 * Profile: Compatibility
feb 03, 2017 7:15:59 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer Information
 * Device: OpenAL Soft
 * Vendor: OpenAL Community
 * Renderer: OpenAL Soft
 * Version: 1.1 ALSOFT 1.15.1
 * Supported channels: 64
 * ALC extensions: ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE ALC_EXT_DEDICATED ALC_EXT_disconnect ALC_EXT_EFX ALC_EXT_thread_local_context ALC_SOFT_loopback
 * AL extensions: AL_EXT_ALAW AL_EXT_DOUBLE AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXT_source_distance_model AL_LOKI_quadriphonic AL_SOFT_buffer_samples AL_SOFT_buffer_sub_data AL_SOFTX_deferred_updates AL_SOFT_direct_channels AL_SOFT_loop_points AL_SOFT_source_latency
feb 03, 2017 7:15:59 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
feb 03, 2017 7:15:59 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio effect extension version: 1.0
feb 03, 2017 7:15:59 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio max auxiliary sends: 4
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: WardIso. Ignoring..
feb 03, 2017 7:15:59 PM com.jme3.material.Material read
WARNING: The material parameter is not defined: Minnaert. Ignoring..
[JME3] OpenGL debug message
       ID: 131185
       Source: API
       Type: OTHER
       Severity: null
       Message: Buffer detailed info: Buffer object 1 (bound to GL_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at com.jme3.system.lwjgl.LwjglGLDebugOutputHandler.handleMessage(LwjglGLDebugOutputHandler.java:76)
[JME3] OpenGL debug message
       ID: 131185
       Source: API
       Type: OTHER
       Severity: null
       Message: Buffer detailed info: Buffer object 2 (bound to GL_ELEMENT_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at com.jme3.system.lwjgl.LwjglGLDebugOutputHandler.handleMessage(LwjglGLDebugOutputHandler.java:76)
[JME3] OpenGL debug message
       ID: 131185
       Source: API
       Type: OTHER
       Severity: null
       Message: Buffer detailed info: Buffer object 3 (bound to GL_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at com.jme3.system.lwjgl.LwjglGLDebugOutputHandler.handleMessage(LwjglGLDebugOutputHandler.java:76)
[JME3] OpenGL debug message
       ID: 131185
       Source: API
       Type: OTHER
       Severity: null
       Message: Buffer detailed info: Buffer object 4 (bound to GL_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at com.jme3.system.lwjgl.LwjglGLDebugOutputHandler.handleMessage(LwjglGLDebugOutputHandler.java:76)
[JME3] OpenGL debug message
       ID: 131185
       Source: API
       Type: OTHER
       Severity: null
       Message: Buffer detailed info: Buffer object 5 (bound to GL_ELEMENT_ARRAY_BUFFER_ARB, usage hint is GL_STATIC_DRAW) will use VIDEO memory as the source for buffer object operations.
java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Thread.java:1329)
	at com.jme3.system.lwjgl.LwjglGLDebugOutputHandler.handleMessage(LwjglGLDebugOutputHandler.java:76)
feb 03, 2017 7:16:00 PM com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.renderer.RendererException: Attempting to upload empty buffer (limit = 0), that's an error
	at com.jme3.renderer.lwjgl.LwjglGL.checkLimit(LwjglGL.java:23)
	at com.jme3.renderer.lwjgl.LwjglGL.glUniform4(LwjglGL.java:380)
	at com.jme3.renderer.opengl.GLDebugES.glUniform4(GLDebugES.java:387)
	at com.jme3.renderer.opengl.GLRenderer.updateUniform(GLRenderer.java:1057)
	at com.jme3.renderer.opengl.GLRenderer.updateShaderUniforms(GLRenderer.java:1077)
	at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1299)
	at com.jme3.material.logic.DefaultTechniqueDefLogic.render(DefaultTechniqueDefLogic.java:94)
	at com.jme3.material.Technique.render(Technique.java:167)
	at com.jme3.material.Material.render(Material.java:966)
	at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:616)
	at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:266)
	at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:305)
	at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:870)
	at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:781)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1097)
	at com.jme3.renderer.RenderManager.render(RenderManager.java:1145)
	at com.jme3.app.SimpleApplication.update(SimpleApplication.java:253)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:151)
	at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:193)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:232)
	at java.lang.Thread.run(Thread.java:745)

BUILD SUCCESSFUL (total time: 44 seconds)

To be honest: I have no clue where to start looking and I was hoping someone could give me some directions. I think the problem lies somewhere in a MatDef, because oceanmonkey is using one for the water.

Husky

I think you should not be able to produce such an issue by using only MatDefs.
Is it using it’s custom Mesh Subclass which for some reason sets an empty vertex or index buffer?

1 Like

Yes, it uses a Mesh indeed, with some VertexBuffers

public class OceanMesh extends Mesh
{
	private int _vertexAxisSize;
	private int _vertexCount;
	private VertexBuffer _position;
	private VertexBuffer _normals;

But I have checked them and they are all filled

setBuffer(Type.Position, 3, positions);
		_position = getBuffer(Type.Position);
		setBuffer(Type.TexCoord, 2, texCoords);
		setBuffer(Type.Normal, 3, normals);
		_normals = getBuffer(Type.Normal);
		setBuffer(Type.Index, 3, indices);

If only I would get an indication of WHERE the error occurs… :slight_smile:
Why is it nog giving a line number where the error occurs?

Not sure if this helps narrowing it down:
There is a class which implements SceneProcessor. With a simple System.out.println("I am here..."); I discovered that the

@Override
public void preFrame(float tpf)
{
	tpf = tpf;
}

is reached, but

@Override
public void postFrame(FrameBuffer out)
{
	if (isDebug)
	{
		displayMap(_depthMapPicture, 500);
		displayMap(_reflectionPicture, 650);
		displayMap(_refractionPicture, 800);
	}
}

is not reached anymore.

The stack trace implies that it is uniform related. Perhaps a uniform is set to a bad value… looking at the source code for those stack trace lines might tell you what type and stuff.

1 Like

Got it! Thanks @Darkchaos and @pspeed.

It was a Vector4f Array which was empty, so for a quick fix I have added an IF-statement to check whether it is empty or not.

Husky

sorry, saw it to late. Did you managed to solve it? The youtube-vid seems
like so.