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