]> git.sesse.net Git - nageru/blobdiff - nageru/mixer.cpp
Fix an issue with 10-bit input and nonstandard heights (e.g. 1920x800).
[nageru] / nageru / mixer.cpp
index 63d1f724df4c41032382808d9adb5ba2d2286176..465e96708c716c80302f40a7d3ad8987a7d5214e 100644 (file)
@@ -110,11 +110,17 @@ void ensure_texture_resolution(PBOFrameAllocator::Userdata *userdata, unsigned f
                assert(false);
        }
 
-       if (first ||
-           width != userdata->last_width[field] ||
-           height != userdata->last_height[field] ||
-           cbcr_width != userdata->last_cbcr_width[field] ||
-           cbcr_height != userdata->last_cbcr_height[field]) {
+       const bool recreate_main_texture =
+               first ||
+               width != userdata->last_width[field] ||
+               height != userdata->last_height[field] ||
+               cbcr_width != userdata->last_cbcr_width[field] ||
+               cbcr_height != userdata->last_cbcr_height[field];
+       const bool recreate_v210_texture =
+               global_flags.ten_bit_input &&
+               (first || v210_width != userdata->last_v210_width[field] || height != userdata->last_height[field]);
+
+       if (recreate_main_texture) {
                // We changed resolution since last use of this texture, so we need to create
                // a new object. Note that this each card has its own PBOFrameAllocator,
                // we don't need to worry about these flip-flopping between resolutions.
@@ -166,14 +172,14 @@ void ensure_texture_resolution(PBOFrameAllocator::Userdata *userdata, unsigned f
                userdata->last_cbcr_width[field] = cbcr_width;
                userdata->last_cbcr_height[field] = cbcr_height;
        }
-       if (global_flags.ten_bit_input &&
-           (first || v210_width != userdata->last_v210_width[field])) {
+       if (recreate_v210_texture) {
                // Same as above; we need to recreate the texture.
                glBindTexture(GL_TEXTURE_2D, userdata->tex_v210[field]);
                check_error();
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, v210_width, height, 0, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, nullptr);
                check_error();
                userdata->last_v210_width[field] = v210_width;
+               userdata->last_height[field] = height;
        }
 }