diff --git a/include/shadertoy/OpenGL/Buffer.hpp b/include/shadertoy/OpenGL/Buffer.hpp
index c35e43c55151f92c3dc415e5e6a70e773408d547..0521b777a6d14f994207d319547e9f4f02e0647f 100644
--- a/include/shadertoy/OpenGL/Buffer.hpp
+++ b/include/shadertoy/OpenGL/Buffer.hpp
@@ -24,7 +24,7 @@ namespace OpenGL
 	 */
 	class shadertoy_EXPORT Buffer : public Resource<
 		Buffer,
-		MultiAllocator<&glCreateBuffers, &glDeleteBuffers>,
+		MultiAllocator<&glGenBuffers, &glDeleteBuffers>,
 		NullBufferError>
 	{
 	public:
diff --git a/include/shadertoy/OpenGL/Framebuffer.hpp b/include/shadertoy/OpenGL/Framebuffer.hpp
index 35758b8922aa8e02eec1231ca30dea668e8f6993..02b9d5f7f706d693706ad001d74dd0f364023e4b 100644
--- a/include/shadertoy/OpenGL/Framebuffer.hpp
+++ b/include/shadertoy/OpenGL/Framebuffer.hpp
@@ -24,7 +24,7 @@ namespace OpenGL
 	 */
 	class shadertoy_EXPORT Framebuffer : public Resource<
 		Framebuffer,
-		MultiAllocator<&glCreateFramebuffers, &glDeleteFramebuffers>,
+		MultiAllocator<&glGenFramebuffers, &glDeleteFramebuffers>,
 		NullFramebufferError>
 	{
 	public:
diff --git a/include/shadertoy/OpenGL/Renderbuffer.hpp b/include/shadertoy/OpenGL/Renderbuffer.hpp
index 7b1ded03e2199c35c570e3b68e976522b599772f..71ca7de965887ac0650e6a050d41818d73b8d371 100644
--- a/include/shadertoy/OpenGL/Renderbuffer.hpp
+++ b/include/shadertoy/OpenGL/Renderbuffer.hpp
@@ -21,7 +21,7 @@ namespace OpenGL
 	 */
 	class shadertoy_EXPORT Renderbuffer : public Resource<
 		Renderbuffer,
-		MultiAllocator<&glCreateRenderbuffers, &glDeleteRenderbuffers>,
+		MultiAllocator<&glGenRenderbuffers, &glDeleteRenderbuffers>,
 		NullRenderbufferError>
 	{
 	public:
diff --git a/include/shadertoy/OpenGL/Texture.hpp b/include/shadertoy/OpenGL/Texture.hpp
index 7bce0a2ca6b8523d2434d374bb737d8d4eba80c5..56f847da923e97d3dec243fda309ea550c8dc476 100644
--- a/include/shadertoy/OpenGL/Texture.hpp
+++ b/include/shadertoy/OpenGL/Texture.hpp
@@ -75,24 +75,26 @@ namespace OpenGL
 		/**
 		 * glTextureParameteri
 		 *
+		 * @param target Texture target
 		 * @param pname Parameter name to set
 		 * @param param Value of the parameter
 		 *
 		 * @throws OpenGLError
 		 * @throws NullTextureError
 		 */
-		void Parameter(GLenum pname, GLint param);
+		void Parameter(GLenum target, GLenum pname, GLint param);
 
 		/**
 		 * glTextureParameterf
 		 *
+		 * @param target Texture target
 		 * @param pname Parameter name to set
 		 * @param param Value of the parameter
 		 *
 		 * @throws OpenGLError
 		 * @throws NullTextureError
 		 */
-		void Parameter(GLenum pname, GLfloat param);
+		void Parameter(GLenum target, GLenum pname, GLfloat param);
 
 		/**
 		 * glTextureImage2DEXT
diff --git a/src/OpenGL/Buffer.cpp b/src/OpenGL/Buffer.cpp
index 4f6de470d2a4279be8d4c3141ac1f41b8b2dfa5a..12c2594885d7cf571c42d0afdb860fda17c3ed08 100644
--- a/src/OpenGL/Buffer.cpp
+++ b/src/OpenGL/Buffer.cpp
@@ -16,5 +16,5 @@ void Buffer::Bind(GLenum target)
 
 void Buffer::Data(GLsizei size, const void *data, GLenum usage)
 {
-	glCall(glNamedBufferData, GLuint(*this), size, data, usage);
+	glCall(glNamedBufferDataEXT, GLuint(*this), size, data, usage);
 }
diff --git a/src/OpenGL/Framebuffer.cpp b/src/OpenGL/Framebuffer.cpp
index 15349abf6d7beb3d45a68f125a34df19b0251794..29ec72fd120fe92ebf7a72e42fbc41bd9eeb07e1 100644
--- a/src/OpenGL/Framebuffer.cpp
+++ b/src/OpenGL/Framebuffer.cpp
@@ -17,5 +17,5 @@ void Framebuffer::Bind(GLenum target)
 
 void Framebuffer::Texture(GLenum attachment, shadertoy::OpenGL::Texture &texture, GLint level)
 {
-	glCall(glNamedFramebufferTexture, GLuint(*this), attachment, GLuint(texture), level);
+	glCall(glNamedFramebufferTextureEXT, GLuint(*this), attachment, GLuint(texture), level);
 }
diff --git a/src/OpenGL/Renderbuffer.cpp b/src/OpenGL/Renderbuffer.cpp
index e54893eb89420326be5ff282002e893f314d667f..2e3c0b068f4e24ae47a5da32e045b45b400c79c8 100644
--- a/src/OpenGL/Renderbuffer.cpp
+++ b/src/OpenGL/Renderbuffer.cpp
@@ -16,5 +16,5 @@ void Renderbuffer::Bind(GLenum target)
 
 void Renderbuffer::Storage(GLenum internalFormat, GLsizei width, GLsizei height)
 {
-	glCall(glNamedRenderbufferStorage, GLuint(*this), internalFormat, width, height);
+	glCall(glNamedRenderbufferStorageEXT, GLuint(*this), internalFormat, width, height);
 }
diff --git a/src/OpenGL/Texture.cpp b/src/OpenGL/Texture.cpp
index c3a08ec56ba580d4c46e08dc5eac29be226628ff..fd2d57b194386f9627679d11805eac40b6e6584b 100644
--- a/src/OpenGL/Texture.cpp
+++ b/src/OpenGL/Texture.cpp
@@ -12,7 +12,7 @@ NullTextureError::NullTextureError()
 GLuint TextureAllocator::Create(GLenum target)
 {
 	GLuint res;
-	glCall(glCreateTextures, target, 1, &res);
+	glCall(glGenTextures, 1, &res);
 	return res;
 }
 
@@ -31,14 +31,14 @@ void Texture::Bind(GLenum target)
 	glCall(glBindTexture, target, GLuint(*this));
 }
 
-void Texture::Parameter(GLenum pname, GLint param)
+void Texture::Parameter(GLenum target, GLenum pname, GLint param)
 {
-	glCall(glTextureParameteri, GLuint(*this), pname, param);
+	glCall(glTextureParameteriEXT, GLuint(*this), target, pname, param);
 }
 
-void Texture::Parameter(GLenum pname, GLfloat param)
+void Texture::Parameter(GLenum target, GLenum pname, GLfloat param)
 {
-	glCall(glTextureParameterf, GLuint(*this), pname, param);
+	glCall(glTextureParameterfEXT, GLuint(*this), target, pname, param);
 }
 
 void Texture::Image2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data)
diff --git a/src/RenderContext.cpp b/src/RenderContext.cpp
index 1f8f411d292fad2fb8852db21ebb45513dddc9d7..18966651e8f9972501dd8325ae036298176469f1 100644
--- a/src/RenderContext.cpp
+++ b/src/RenderContext.cpp
@@ -54,10 +54,10 @@ shared_ptr<TextureEngine> RenderContext::BuildTextureEngine()
 			int minFilter = max((int)inputConfig.minFilter, GL_LINEAR),
 				magFilter = (int)inputConfig.magFilter;
 
-			texture->Parameter(GL_TEXTURE_MAG_FILTER, magFilter);
-			texture->Parameter(GL_TEXTURE_MIN_FILTER, minFilter);
-			texture->Parameter(GL_TEXTURE_WRAP_S, inputConfig.wrap);
-			texture->Parameter(GL_TEXTURE_WRAP_T, inputConfig.wrap);
+			texture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
+			texture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
+			texture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, inputConfig.wrap);
+			texture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, inputConfig.wrap);
 
 			return texture;
 		}
@@ -262,10 +262,10 @@ void RenderContext::DoReadWriteCurrentFrame(GLuint &texIn, GLuint &texOut)
 			screenQuadTexture = make_shared<OpenGL::Texture>(GL_TEXTURE_2D);
 
 			// Setup screenQuadTexture
-			screenQuadTexture->Parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-			screenQuadTexture->Parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-			screenQuadTexture->Parameter(GL_TEXTURE_WRAP_S, GL_REPEAT);
-			screenQuadTexture->Parameter(GL_TEXTURE_WRAP_T, GL_REPEAT);
+			screenQuadTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+			screenQuadTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+			screenQuadTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+			screenQuadTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
 			screenQuadTexture->Image2D(GL_TEXTURE_2D, 0, GL_RGBA32F,
 				config.width, config.height, 0, GL_BGRA, GL_FLOAT, nullptr);
 		}
diff --git a/src/TextureEngine.cpp b/src/TextureEngine.cpp
index 6f32034e02b853bee219c171eb95e96a54d73e26..48b08e75eebe178475d85d46a8f9d1c161a248d3 100644
--- a/src/TextureEngine.cpp
+++ b/src/TextureEngine.cpp
@@ -141,8 +141,8 @@ shared_ptr<OpenGL::Texture> TextureEngine::NoiseTextureHandler(const InputConfig
 {
 	// A noise texture
 	auto noiseTexture = make_shared<OpenGL::Texture>(GL_TEXTURE_2D);
-	noiseTexture->Parameter(GL_TEXTURE_SWIZZLE_B, GL_RED);
-	noiseTexture->Parameter(GL_TEXTURE_SWIZZLE_G, GL_RED);
+	noiseTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
+	noiseTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
 
 	// Create the actual noise
 	vector<unsigned char> rnd(config.width * config.height);
@@ -172,8 +172,8 @@ shared_ptr<OpenGL::Texture> TextureEngine::CheckerTextureHandler(const InputConf
 
 	// A checkerboard texture
 	auto checkerTexture = make_shared<OpenGL::Texture>(GL_TEXTURE_2D);
-	checkerTexture->Parameter(GL_TEXTURE_SWIZZLE_B, GL_RED);
-	checkerTexture->Parameter(GL_TEXTURE_SWIZZLE_G, GL_RED);
+	checkerTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
+	checkerTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_RED);
 
 	// Generate the checkerboard
 	vector<unsigned char> chk(config.width * config.height);
@@ -218,11 +218,11 @@ void TextureEngine::Initialize()
 			chk[j * height + i] = ((i / size) % 2 == 0) ^ ((j / size) % 2 == 0) ? 255 : 0;
 
 	// Load it and set parameters
-	emptyTexture->Parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	emptyTexture->Parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-	emptyTexture->Parameter(GL_TEXTURE_WRAP_S, GL_REPEAT);
-	emptyTexture->Parameter(GL_TEXTURE_WRAP_T, GL_REPEAT);
-	emptyTexture->Parameter(GL_TEXTURE_SWIZZLE_B, GL_RED);
+	emptyTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+	emptyTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+	emptyTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+	emptyTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+	emptyTexture->Parameter(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
 	emptyTexture->Image2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED,
 		GL_UNSIGNED_BYTE, chk.data());
 }
@@ -314,10 +314,10 @@ void TextureEngine::ApplyTextureOptions(const InputConfig &inputConfig, OpenGL::
 {
 	GLint minFilter = inputConfig.minFilter;
 
-	texture.Parameter(GL_TEXTURE_MIN_FILTER, minFilter);
-	texture.Parameter(GL_TEXTURE_MAG_FILTER, inputConfig.magFilter);
-	texture.Parameter(GL_TEXTURE_WRAP_S, inputConfig.wrap);
-	texture.Parameter(GL_TEXTURE_WRAP_T, inputConfig.wrap);
+	texture.Parameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
+	texture.Parameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, inputConfig.magFilter);
+	texture.Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, inputConfig.wrap);
+	texture.Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, inputConfig.wrap);
 
 	if (minFilter > GL_LINEAR)
 	{
diff --git a/src/ToyBuffer.cpp b/src/ToyBuffer.cpp
index 106057d2d9dc302807977ecb4cbc23e107cc3361..054119734c9dd9ba6832057a24a29ffcbfee81ba 100644
--- a/src/ToyBuffer.cpp
+++ b/src/ToyBuffer.cpp
@@ -162,10 +162,10 @@ void ToyBuffer::InitializeRenderTexture(shared_ptr<OpenGL::Texture> &texptr, int
 		texptr = make_shared<OpenGL::Texture>(GL_TEXTURE_2D);
 
 	// Allocate texture storage according to width/height
-	texptr->Parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	texptr->Parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-	texptr->Parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-	texptr->Parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+	texptr->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+	texptr->Parameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+	texptr->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+	texptr->Parameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 	texptr->Image2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_BGRA,
 		GL_UNSIGNED_BYTE, nullptr);