@Override public void shaderDeleteProgram(final JCGLProgramShaderType p) throws JCGLException, JCGLExceptionDeleted { NullCheck.notNull(p); FakeCompatibilityChecks.checkProgramShader(this.context, p); JCGLResources.checkNotDeleted(p); FakeShaders.LOG.debug("delete program shader {}", p.getName()); ((FakeObjectDeletable) p).setDeleted(); if (p.equals(this.current)) { this.current = null; } }
@Override public void shaderDeleteProgram(final JCGLProgramShaderType p) throws JCGLException, JCGLExceptionDeleted { NullCheck.notNull(p); LWJGL3ProgramShader.checkProgramShader(this.context, p); JCGLResources.checkNotDeleted(p); if (LWJGL3Shaders.LOG.isDebugEnabled()) { LWJGL3Shaders.LOG.debug("delete program shader {}", p.getName()); } GL20.glDeleteProgram(p.getGLName()); ((LWJGL3ObjectDeletable) p).setDeleted(); if (p.equals(this.current)) { this.current = null; } }
@Test public final void testProgramLinkValidUniforms3() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex("valid0", this.getShaderLines("valid0.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment( "validarray0", this.getShaderLines("validarray0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("validarray0", v, Optional.empty(), f); Assert.assertEquals("validarray0", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramUniformType> u = p.getUniforms(); Assert.assertEquals(1L, (long) u.size()); final Set<Integer> locations = new HashSet<>(u.values().size()); for (final JCGLProgramUniformType uni : u.values()) { final Integer id = Integer.valueOf(uni.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkUniform( p, u, "big_array[0]", JCGLType.TYPE_FLOAT_VECTOR_4, 16); }
@Test public final void testProgramLinkValidAttributesMatrices3() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex( "attributes3", this.getShaderLines("attributes3.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("attributes3", v, Optional.empty(), f); Assert.assertEquals("attributes3", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramAttributeType> a = p.getAttributes(); Assert.assertEquals(3L, (long) a.size()); final Set<Integer> locations = new HashSet<>(a.values().size()); for (final JCGLProgramAttributeType attr : a.values()) { final Integer id = Integer.valueOf(attr.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkAttribute( p, a, "m4", JCGLType.TYPE_FLOAT_MATRIX_3x4); JCGLShadersContract.checkAttribute( p, a, "m3", JCGLType.TYPE_FLOAT_MATRIX_3); JCGLShadersContract.checkAttribute( p, a, "m2", JCGLType.TYPE_FLOAT_MATRIX_3x2); }
@Test public final void testProgramLinkValidAttributesMatrices1() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex( "attributes2", this.getShaderLines("attributes2.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("attributes2", v, Optional.empty(), f); Assert.assertEquals("attributes2", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramAttributeType> a = p.getAttributes(); Assert.assertEquals(3L, (long) a.size()); final Set<Integer> locations = new HashSet<>(a.values().size()); for (final JCGLProgramAttributeType attr : a.values()) { final Integer id = Integer.valueOf(attr.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkAttribute( p, a, "m4", JCGLType.TYPE_FLOAT_MATRIX_4); JCGLShadersContract.checkAttribute( p, a, "m3", JCGLType.TYPE_FLOAT_MATRIX_4x3); JCGLShadersContract.checkAttribute( p, a, "m2", JCGLType.TYPE_FLOAT_MATRIX_4x2); }
@Test public final void testProgramLinkValidAttributesMatrices4() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex( "attributes4", this.getShaderLines("attributes4.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("attributes4", v, Optional.empty(), f); Assert.assertEquals("attributes4", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramAttributeType> a = p.getAttributes(); Assert.assertEquals(3L, (long) a.size()); final Set<Integer> locations = new HashSet<>(a.values().size()); for (final JCGLProgramAttributeType attr : a.values()) { final Integer id = Integer.valueOf(attr.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkAttribute( p, a, "m4", JCGLType.TYPE_FLOAT_MATRIX_2x4); JCGLShadersContract.checkAttribute( p, a, "m3", JCGLType.TYPE_FLOAT_MATRIX_2x3); JCGLShadersContract.checkAttribute( p, a, "m2", JCGLType.TYPE_FLOAT_MATRIX_2); }
@Test public final void testProgramLinkValidAttributesMatrices0() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex( "attributes1", this.getShaderLines("attributes1.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("attributes1", v, Optional.empty(), f); Assert.assertEquals("attributes1", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramAttributeType> a = p.getAttributes(); Assert.assertEquals(3L, (long) a.size()); final Set<Integer> locations = new HashSet<>(a.values().size()); for (final JCGLProgramAttributeType attr : a.values()) { final Integer id = Integer.valueOf(attr.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkAttribute( p, a, "m4", JCGLType.TYPE_FLOAT_MATRIX_4); JCGLShadersContract.checkAttribute( p, a, "m3", JCGLType.TYPE_FLOAT_MATRIX_3); JCGLShadersContract.checkAttribute( p, a, "m2", JCGLType.TYPE_FLOAT_MATRIX_2); }
@Test public final void testProgramLinkValidAttributesMatrices2() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex( "attributes2", this.getShaderLines("attributes2.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("attributes2", v, Optional.empty(), f); Assert.assertEquals("attributes2", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramAttributeType> a = p.getAttributes(); Assert.assertEquals(3L, (long) a.size()); final Set<Integer> locations = new HashSet<>(a.values().size()); for (final JCGLProgramAttributeType attr : a.values()) { final Integer id = Integer.valueOf(attr.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkAttribute( p, a, "m4", JCGLType.TYPE_FLOAT_MATRIX_4); JCGLShadersContract.checkAttribute( p, a, "m3", JCGLType.TYPE_FLOAT_MATRIX_4x3); JCGLShadersContract.checkAttribute( p, a, "m2", JCGLType.TYPE_FLOAT_MATRIX_4x2); }
@Test public final void testProgramLinkValidUniforms2() { final JCGLShadersType s = this.getShaders("main"); final JCGLVertexShaderType v = s.shaderCompileVertex("uniforms2", this.getShaderLines("uniforms2.vert")); final JCGLFragmentShaderType f = s.shaderCompileFragment("valid0", this.getShaderLines("valid0.frag")); final JCGLProgramShaderType p = s.shaderLinkProgram("uniforms2", v, Optional.empty(), f); Assert.assertEquals("uniforms2", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0); final Map<String, JCGLProgramUniformType> u = p.getUniforms(); Assert.assertEquals(3L, (long) u.size()); final Set<Integer> locations = new HashSet<>(u.values().size()); for (final JCGLProgramUniformType uni : u.values()) { final Integer id = Integer.valueOf(uni.getGLName()); Assert.assertTrue(id.intValue() >= 0); Assert.assertFalse(locations.contains(id)); locations.add(id); } JCGLShadersContract.checkUniform( p, u, "s2", JCGLType.TYPE_SAMPLER_2D, 1); JCGLShadersContract.checkUniform( p, u, "s3", JCGLType.TYPE_SAMPLER_3D, 1); JCGLShadersContract.checkUniform( p, u, "sc", JCGLType.TYPE_SAMPLER_CUBE, 1); }
s.shaderLinkProgram("valid0", v, Optional.of(g), f); Assert.assertEquals("valid0", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0);
s.shaderLinkProgram("attributes0", v, Optional.empty(), f); Assert.assertEquals("attributes0", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0);
s.shaderLinkProgram("uniforms1", v, Optional.empty(), f); Assert.assertEquals("uniforms1", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0);
s.shaderLinkProgram("uniforms0", v, Optional.empty(), f); Assert.assertEquals("uniforms0", p.getName()); Assert.assertFalse(p.isDeleted()); Assert.assertTrue(p.getGLName() > 0);