mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
Add F_r32i texture format (useful for atomic image writes from shaders)
This commit is contained in:
parent
7a610cc198
commit
0e1f261ca5
@ -4774,6 +4774,9 @@ framebuffer_copy_to_ram(Texture *tex, int view, int z,
|
||||
case GL_FLOAT:
|
||||
GLCAT.spam(false) << "GL_FLOAT";
|
||||
break;
|
||||
case GL_INT:
|
||||
GLCAT.spam(false) << "GL_INT";
|
||||
break;
|
||||
default:
|
||||
GLCAT.spam(false) << "unknown";
|
||||
break;
|
||||
@ -6545,6 +6548,8 @@ get_component_type(Texture::ComponentType component_type) {
|
||||
} else {
|
||||
return GL_UNSIGNED_BYTE;
|
||||
}
|
||||
case Texture::T_int:
|
||||
return GL_INT;
|
||||
default:
|
||||
GLCAT.error() << "Invalid Texture::Type value!\n";
|
||||
return GL_UNSIGNED_BYTE;
|
||||
@ -6756,6 +6761,8 @@ get_external_image_format(Texture *tex) const {
|
||||
case Texture::F_luminance_alpha:
|
||||
case Texture::F_sluminance_alpha:
|
||||
return GL_LUMINANCE_ALPHA;
|
||||
case Texture::F_r32i:
|
||||
return GL_RED_INTEGER;
|
||||
}
|
||||
GLCAT.error()
|
||||
<< "Invalid Texture::Format value in get_external_image_format(): "
|
||||
@ -7153,6 +7160,9 @@ get_internal_image_format(Texture *tex) const {
|
||||
case Texture::F_sluminance_alpha:
|
||||
return GL_SLUMINANCE8_ALPHA8;
|
||||
|
||||
case Texture::F_r32i:
|
||||
return GL_R32I;
|
||||
|
||||
default:
|
||||
GLCAT.error()
|
||||
<< "Invalid image format in get_internal_image_format(): "
|
||||
@ -10306,6 +10316,10 @@ do_extract_texture_data(CLP(TextureContext) *gtc) {
|
||||
format = Texture::F_red;
|
||||
break;
|
||||
#endif
|
||||
case GL_R32I:
|
||||
format = Texture::F_r32i;
|
||||
break;
|
||||
|
||||
#ifndef OPENGLES
|
||||
case GL_RED:
|
||||
format = Texture::F_red;
|
||||
|
@ -581,6 +581,10 @@ estimate_texture_memory() const {
|
||||
bpp = 6;
|
||||
break;
|
||||
|
||||
case Texture::F_r32i:
|
||||
bpp = 4;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1597,6 +1601,10 @@ write(ostream &out, int indent_level) const {
|
||||
out << " floats";
|
||||
break;
|
||||
|
||||
case T_int:
|
||||
out << " ints";
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1707,6 +1715,10 @@ write(ostream &out, int indent_level) const {
|
||||
case F_sluminance_alpha:
|
||||
out << "sluminance_alpha";
|
||||
break;
|
||||
|
||||
case F_r32i:
|
||||
out << "r32i";
|
||||
break;
|
||||
}
|
||||
|
||||
if (cdata->_compression != CM_default) {
|
||||
@ -2034,6 +2046,8 @@ format_component_type(ComponentType ct) {
|
||||
return "float";
|
||||
case T_unsigned_int_24_8:
|
||||
return "unsigned_int_24_8";
|
||||
case T_int:
|
||||
return "int";
|
||||
}
|
||||
|
||||
return "**invalid**";
|
||||
@ -2055,6 +2069,8 @@ string_component_type(const string &str) {
|
||||
return T_float;
|
||||
} else if (cmp_nocase(str, "unsigned_int_24_8") == 0) {
|
||||
return T_unsigned_int_24_8;
|
||||
} else if (cmp_nocase(str, "int") == 0) {
|
||||
return T_int;
|
||||
}
|
||||
|
||||
gobj_cat->error()
|
||||
@ -2137,6 +2153,8 @@ format_format(Format format) {
|
||||
return "sluminance";
|
||||
case F_sluminance_alpha:
|
||||
return "sluminance_alpha";
|
||||
case F_r32i:
|
||||
return "r32i";
|
||||
}
|
||||
return "**invalid**";
|
||||
}
|
||||
@ -2215,6 +2233,8 @@ string_format(const string &str) {
|
||||
return F_sluminance;
|
||||
} else if (cmp_nocase(str, "sluminance_alpha") == 0) {
|
||||
return F_sluminance_alpha;
|
||||
} else if (cmp_nocase(str, "r32i") == 0) {
|
||||
return F_r32i;
|
||||
}
|
||||
|
||||
gobj_cat->error()
|
||||
@ -5060,6 +5080,7 @@ do_set_format(CData *cdata, Texture::Format format) {
|
||||
case F_luminance:
|
||||
case F_r16:
|
||||
case F_sluminance:
|
||||
case F_r32i:
|
||||
cdata->_num_components = 1;
|
||||
break;
|
||||
|
||||
@ -5119,6 +5140,10 @@ do_set_component_type(CData *cdata, Texture::ComponentType component_type) {
|
||||
case T_unsigned_int_24_8:
|
||||
cdata->_component_width = 4;
|
||||
break;
|
||||
|
||||
case T_int:
|
||||
cdata->_component_width = 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ PUBLISHED:
|
||||
T_unsigned_short,
|
||||
T_float,
|
||||
T_unsigned_int_24_8,
|
||||
T_int,
|
||||
};
|
||||
|
||||
enum Format {
|
||||
@ -139,6 +140,8 @@ PUBLISHED:
|
||||
F_srgb_alpha,
|
||||
F_sluminance,
|
||||
F_sluminance_alpha,
|
||||
|
||||
F_r32i, // 32-bit integer, used for atomic access
|
||||
};
|
||||
|
||||
enum FilterType {
|
||||
|
Loading…
x
Reference in New Issue
Block a user