fix audio big btn replay, new proj path, proxy fix, updated Features5
[goodguy/history.git] / cinelerra-5.1 / guicast / bctexture.C
index 1ecbfd35c856b9271b6ed6ce51e852b32a9185da..b527b4e137327ab853a7528958907338d30b56d2 100644 (file)
@@ -186,6 +186,21 @@ int BC_Texture::get_window_id()
 }
 
 
+void BC_Texture::draw_texture(
+       float in_x1, float in_y1, float in_x2, float in_y2,
+       float out_x1, float out_y1, float out_x2, float out_y2)
+{
+#ifdef HAVE_GL
+       glBegin(GL_QUADS);
+       glNormal3f(0, 0, 1.0);
+       glTexCoord2f(in_x1, in_y1);   glVertex3f(out_x1, out_y1, 0);
+       glTexCoord2f(in_x2, in_y1);   glVertex3f(out_x2, out_y1, 0);
+       glTexCoord2f(in_x2, in_y2);   glVertex3f(out_x2, out_y2, 0);
+       glTexCoord2f(in_x1, in_y2);   glVertex3f(out_x1, out_y2, 0);
+       glEnd();
+#endif
+}
+
 void BC_Texture::bind(int texture_unit)
 {
 #ifdef HAVE_GL
@@ -212,3 +227,33 @@ void BC_Texture::bind(int texture_unit)
 #endif
 }
 
+#ifdef HAVE_GL
+static void write_ppm(uint8_t *tp, int w, int h, const char *fmt, ...)
+{
+  va_list ap;    va_start(ap, fmt);
+  char fn[256];  vsnprintf(fn, sizeof(fn), fmt, ap);
+  va_end(ap);
+  FILE *fp = !strcmp(fn,"-") ? stdout : fopen(fn,"w");
+  if( fp ) {
+    fprintf(fp,"P6\n%d %d\n255\n",w,h);
+    fwrite(tp,3*w,h,fp);
+    if( fp != stdout ) fclose(fp);
+  }
+}
+#endif
+
+void BC_Texture::write_tex(const char *fn)
+{
+#ifdef HAVE_GL
+       int prev_id = -1;
+       glGetIntegerv(GL_ACTIVE_TEXTURE, &prev_id);
+       glActiveTexture(this->texture_id);
+       int w = get_texture_w(), h = get_texture_h();
+       uint8_t img[w*h*3];
+       glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, img);
+       write_ppm(img, w, h, "%s", fn);
+       glActiveTexture(prev_id);
+#endif
+}
+
+