Creating Multisample Texture Correctly
opengl, textures
Solution
You do not need to set nearest filtering because multisample textures are not filtered at all. The specification (section 8.10) does list `GL_TEXTURE_2D_MULTISAMPLE` as a valid target for `glTexParameteri` (which you should use instead of `glTexParameterf` for integer parameters), but lists among possible errors:
An INVALID_ENUM error is generated if target is either TEXTURE_2D_MULTISAMPLE or TEXTURE_2D_MULTISAMPLE_ARRAY, and pname is any sampler state from table 23.18.
Problem
For standard OpenGL textures, the filtering state is part of the texture, and must be defined when the texture is created. This leads to code like: ``` glGenTextures(1,&_texture_id); glBindTexture(GL_TEXTURE_2D,_texture_id); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexImage2D(...); ``` This works perfectly. I am trying to make a multisampled texture (for use in a FBO). The code is very similar: ``` glGenTextures(1,&_texture_id); glBindTexture(GL_TEXTURE_2D_MULTISAMPLE,_texture_id); glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D_MULTISAMPLE,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexImage2DMultisample(...); ``` I am using a debug context, and with this code the first `glTexParameterf(...)` call causes: GL_INVALID_ENUM error generated. multisample texture targets doesn't support sampler state I don't know what this is supposed to mean. Notice that multisampled textures only support nearest filtering. I am specifying this. I noticed that for some of the calls (in particular `glTexParameterf(...)`), the `GL_TEXTURE_2D_MULTISAMPLE` is not a listed input in the documentation (which would indeed explain the invalid enum error if they're actually invalid, not just forgotten). However, if it is not accepted, then how am I supposed to set nearest filtering?