Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
404 results
Show changes
Commits on Source (6)
......@@ -96,6 +96,24 @@ vlc_gl_filter_LoadModule(vlc_object_t *parent, const char *name,
return VLC_SUCCESS;
}
static void
DeleteFramebuffersOut(struct vlc_gl_filter_priv *priv)
{
const opengl_vtable_t *vt = &priv->filter.api->vt;
vt->DeleteFramebuffers(priv->tex_count, priv->framebuffers_out);
vt->DeleteTextures(priv->tex_count, priv->textures_out);
}
static void
DeleteFramebufferMSAA(struct vlc_gl_filter_priv *priv)
{
const opengl_vtable_t *vt = &priv->filter.api->vt;
vt->DeleteFramebuffers(1, &priv->framebuffer_msaa);
vt->DeleteRenderbuffers(1, &priv->renderbuffer_msaa);
}
void
vlc_gl_filter_Delete(struct vlc_gl_filter *filter)
{
......@@ -114,19 +132,185 @@ vlc_gl_filter_Delete(struct vlc_gl_filter *filter)
vlc_gl_filter_Delete(subfilter);
}
const opengl_vtable_t *vt = &filter->api->vt;
if (priv->tex_count)
DeleteFramebuffersOut(priv);
if (filter->config.msaa_level)
DeleteFramebufferMSAA(priv);
vlc_object_delete(&filter->obj);
}
static int
InitPlane(struct vlc_gl_filter_priv *priv, unsigned plane, GLsizei width,
GLsizei height)
{
const opengl_vtable_t *vt = &priv->filter.api->vt;
GLuint framebuffer = priv->framebuffers_out[plane];
GLuint texture = priv->textures_out[plane];
vt->BindTexture(GL_TEXTURE_2D, texture);
vt->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, NULL);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
/* iOS needs GL_CLAMP_TO_EDGE or power-of-two textures */
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
/* Create a framebuffer and attach the texture */
vt->BindFramebuffer(GL_FRAMEBUFFER, framebuffer);
vt->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, texture, 0);
GLenum status = vt->CheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
return VLC_EGENERIC;
return VLC_SUCCESS;
}
static int
InitFramebuffersOut(struct vlc_gl_filter_priv *priv)
{
assert(priv->size_out.width > 0 && priv->size_out.height > 0);
/* Not initialized yet */
assert(priv->tex_count == 0);
const opengl_vtable_t *vt = &priv->filter.api->vt;
struct vlc_gl_filter *filter = &priv->filter;
if (filter->config.filter_planes)
{
vt->DeleteFramebuffers(priv->tex_count, priv->framebuffers_out);
vt->DeleteTextures(priv->tex_count, priv->textures_out);
struct vlc_gl_format *glfmt = &priv->glfmt_in;
priv->tex_count = glfmt->tex_count;
vt->GenFramebuffers(priv->tex_count, priv->framebuffers_out);
vt->GenTextures(priv->tex_count, priv->textures_out);
for (unsigned i = 0; i < glfmt->tex_count; ++i)
{
memcpy(priv->tex_widths, priv->plane_widths,
priv->tex_count * sizeof(*priv->tex_widths));
memcpy(priv->tex_heights, priv->plane_heights,
priv->tex_count * sizeof(*priv->tex_heights));
/* Init one framebuffer and texture for each plane */
int ret =
InitPlane(priv, i, priv->tex_widths[i], priv->tex_heights[i]);
if (ret != VLC_SUCCESS)
{
DeleteFramebuffersOut(priv);
return ret;
}
}
}
else
{
priv->tex_count = 1;
if (filter->config.msaa_level)
/* Create a texture having the expected size */
vt->GenFramebuffers(1, priv->framebuffers_out);
vt->GenTextures(1, priv->textures_out);
priv->tex_widths[0] = priv->size_out.width;
priv->tex_heights[0] = priv->size_out.height;
int ret = InitPlane(priv, 0, priv->tex_widths[0], priv->tex_heights[0]);
if (ret != VLC_SUCCESS)
{
DeleteFramebuffersOut(priv);
return ret;
}
}
return VLC_SUCCESS;
}
static int
InitFramebufferMSAA(struct vlc_gl_filter_priv *priv, unsigned msaa_level)
{
assert(msaa_level);
assert(priv->size_out.width > 0 && priv->size_out.height > 0);
const opengl_vtable_t *vt = &priv->filter.api->vt;
vt->GenRenderbuffers(1, &priv->renderbuffer_msaa);
vt->BindRenderbuffer(GL_RENDERBUFFER, priv->renderbuffer_msaa);
vt->RenderbufferStorageMultisample(GL_RENDERBUFFER, msaa_level,
GL_RGBA8,
priv->size_out.width,
priv->size_out.height);
vt->GenFramebuffers(1, &priv->framebuffer_msaa);
vt->BindFramebuffer(GL_FRAMEBUFFER, priv->framebuffer_msaa);
vt->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, priv->renderbuffer_msaa);
GLenum status = vt->CheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
{
vt->DeleteFramebuffers(1, &priv->framebuffer_msaa);
vt->DeleteRenderbuffers(1, &priv->renderbuffer_msaa);
DeleteFramebufferMSAA(priv);
return VLC_EGENERIC;
}
vlc_object_delete(&filter->obj);
return VLC_SUCCESS;
}
int
vlc_gl_filter_InitFramebuffers(struct vlc_gl_filter *filter, bool has_out)
{
struct vlc_gl_filter_priv *priv = vlc_gl_filter_PRIV(filter);
unsigned msaa_level = priv->filter.config.msaa_level;
if (msaa_level)
{
int ret = InitFramebufferMSAA(priv, msaa_level);
if (ret != VLC_SUCCESS)
return ret;
}
/* Every non-blend filter needs its own framebuffer, except the last one */
if (has_out)
{
int ret = InitFramebuffersOut(priv);
if (ret != VLC_SUCCESS)
{
DeleteFramebufferMSAA(priv);
return ret;
}
}
return VLC_SUCCESS;
}
void
vlc_gl_filter_InitPlaneSizes(struct vlc_gl_filter *filter)
{
struct vlc_gl_filter_priv *priv = vlc_gl_filter_PRIV(filter);
if (filter->config.filter_planes)
{
struct vlc_gl_format *glfmt = &priv->glfmt_in;
priv->plane_count = glfmt->tex_count;
for (unsigned i = 0; i < glfmt->tex_count; ++i)
{
priv->plane_widths[i] = priv->size_out.width
* glfmt->tex_widths[i]
/ glfmt->tex_widths[0];
priv->plane_heights[i] = priv->size_out.height
* glfmt->tex_heights[i]
/ glfmt->tex_heights[0];
}
}
else
{
priv->plane_count = 1;
priv->plane_widths[0] = priv->size_out.width;
priv->plane_heights[0] = priv->size_out.height;
}
}
......@@ -87,4 +87,11 @@ vlc_gl_filter_LoadModule(vlc_object_t *parent, const char *name,
void
vlc_gl_filter_Delete(struct vlc_gl_filter *filter);
int
vlc_gl_filter_InitFramebuffers(struct vlc_gl_filter *filter, bool is_last);
/** Recompute plane count, widths and heights after size_out have changed */
void
vlc_gl_filter_InitPlaneSizes(struct vlc_gl_filter *filter);
#endif
......@@ -176,113 +176,6 @@ vlc_gl_filters_Delete(struct vlc_gl_filters *filters)
free(filters);
}
static int
InitPlane(struct vlc_gl_filter_priv *priv, unsigned plane, GLsizei width,
GLsizei height)
{
const opengl_vtable_t *vt = &priv->filter.api->vt;
GLuint framebuffer = priv->framebuffers_out[plane];
GLuint texture = priv->textures_out[plane];
vt->BindTexture(GL_TEXTURE_2D, texture);
vt->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, NULL);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
/* iOS needs GL_CLAMP_TO_EDGE or power-of-two textures */
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
vt->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
/* Create a framebuffer and attach the texture */
vt->BindFramebuffer(GL_FRAMEBUFFER, framebuffer);
vt->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, texture, 0);
GLenum status = vt->CheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
return VLC_EGENERIC;
return VLC_SUCCESS;
}
static int
InitFramebuffersOut(struct vlc_gl_filter_priv *priv)
{
assert(priv->size_out.width > 0 && priv->size_out.height > 0);
const opengl_vtable_t *vt = &priv->filter.api->vt;
struct vlc_gl_filter *filter = &priv->filter;
if (filter->config.filter_planes)
{
struct vlc_gl_format *glfmt = &priv->glfmt_in;
priv->tex_count = glfmt->tex_count;
vt->GenFramebuffers(priv->tex_count, priv->framebuffers_out);
vt->GenTextures(priv->tex_count, priv->textures_out);
for (unsigned i = 0; i < glfmt->tex_count; ++i)
{
memcpy(priv->tex_widths, priv->plane_widths,
priv->tex_count * sizeof(*priv->tex_widths));
memcpy(priv->tex_heights, priv->plane_heights,
priv->tex_count * sizeof(*priv->tex_heights));
/* Init one framebuffer and texture for each plane */
int ret =
InitPlane(priv, i, priv->tex_widths[i], priv->tex_heights[i]);
if (ret != VLC_SUCCESS)
return ret;
}
}
else
{
priv->tex_count = 1;
/* Create a texture having the expected size */
vt->GenFramebuffers(1, priv->framebuffers_out);
vt->GenTextures(1, priv->textures_out);
priv->tex_widths[0] = priv->size_out.width;
priv->tex_heights[0] = priv->size_out.height;
int ret = InitPlane(priv, 0, priv->tex_widths[0], priv->tex_heights[0]);
if (ret != VLC_SUCCESS)
return ret;
}
return VLC_SUCCESS;
}
static int
InitFramebufferMSAA(struct vlc_gl_filter_priv *priv, unsigned msaa_level)
{
assert(msaa_level);
assert(priv->size_out.width > 0 && priv->size_out.height > 0);
const opengl_vtable_t *vt = &priv->filter.api->vt;
vt->GenRenderbuffers(1, &priv->renderbuffer_msaa);
vt->BindRenderbuffer(GL_RENDERBUFFER, priv->renderbuffer_msaa);
vt->RenderbufferStorageMultisample(GL_RENDERBUFFER, msaa_level,
GL_RGBA8,
priv->size_out.width,
priv->size_out.height);
vt->GenFramebuffers(1, &priv->framebuffer_msaa);
vt->BindFramebuffer(GL_FRAMEBUFFER, priv->framebuffer_msaa);
vt->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, priv->renderbuffer_msaa);
GLenum status = vt->CheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
return VLC_EGENERIC;
return VLC_SUCCESS;
}
struct vlc_gl_filter *
vlc_gl_filters_Append(struct vlc_gl_filters *filters, const char *name,
const config_chain_t *config)
......@@ -381,25 +274,7 @@ vlc_gl_filters_Append(struct vlc_gl_filters *filters, const char *name,
}
else
{
if (filter->config.filter_planes)
{
priv->plane_count = glfmt->tex_count;
for (unsigned i = 0; i < glfmt->tex_count; ++i)
{
priv->plane_widths[i] = priv->size_out.width
* glfmt->tex_widths[i]
/ glfmt->tex_widths[0];
priv->plane_heights[i] = priv->size_out.height
* glfmt->tex_heights[i]
/ glfmt->tex_heights[0];
}
}
else
{
priv->plane_count = 1;
priv->plane_widths[0] = priv->size_out.width;
priv->plane_heights[0] = priv->size_out.height;
}
vlc_gl_filter_InitPlaneSizes(filter);
/* Append to the main filter list */
vlc_list_append(&priv->node, &filters->list);
......@@ -463,26 +338,15 @@ vlc_gl_filters_InitFramebuffers(struct vlc_gl_filters *filters)
vlc_list_foreach(priv, &filters->list, node)
{
unsigned msaa_level = priv->filter.config.msaa_level;
if (msaa_level)
{
int ret = InitFramebufferMSAA(priv, msaa_level);
if (ret != VLC_SUCCESS)
return ret;
}
struct vlc_gl_filter *filter = &priv->filter;
bool is_last = vlc_list_is_last(&priv->node, &filters->list);
if (!is_last)
{
/* It was the last non-blend filter before we append this one */
assert(priv->tex_count == 0);
/* Every non-blend filter needs its own framebuffer, except the last
* one */
int ret = InitFramebuffersOut(priv);
if (ret != VLC_SUCCESS)
return ret;
}
/* Every non-blend filter needs its own framebuffer, except the last
* one */
bool has_out = !is_last;
int ret = vlc_gl_filter_InitFramebuffers(filter, has_out);
if (ret != VLC_SUCCESS)
return ret;
}
/* Restore bindings */
......
......@@ -303,71 +303,6 @@ Close(struct vlc_gl_filter *filter)
free(renderer);
}
static int SetupCoords(struct vlc_gl_renderer *renderer,
const struct vlc_gl_picture *pic);
static int
Draw(struct vlc_gl_filter *filter, const struct vlc_gl_picture *pic,
const struct vlc_gl_input_meta *meta);
int
vlc_gl_renderer_Open(struct vlc_gl_filter *filter,
const config_chain_t *config,
const struct vlc_gl_format *glfmt,
struct vlc_gl_tex_size *size_out)
{
(void) config;
(void) size_out;
const opengl_vtable_t *vt = &filter->api->vt;
struct vlc_gl_sampler *sampler =
vlc_gl_sampler_New(filter->gl, filter->api, glfmt, false);
if (!sampler)
return VLC_EGENERIC;
struct vlc_gl_renderer *renderer = calloc(1, sizeof(*renderer));
if (!renderer)
{
vlc_gl_sampler_Delete(sampler);
return VLC_EGENERIC;
}
static const struct vlc_gl_filter_ops filter_ops = {
.draw = Draw,
.close = Close,
};
filter->ops = &filter_ops;
filter->sys = renderer;
renderer->sampler = sampler;
renderer->api = filter->api;
renderer->vt = vt;
renderer->dump_shaders = var_InheritInteger(filter, "verbose") >= 4;
int ret = opengl_link_program(filter);
if (ret != VLC_SUCCESS)
{
free(renderer);
return ret;
}
const video_format_t *fmt = &sampler->glfmt.fmt;
InitStereoMatrix(renderer->var.StereoMatrix, fmt->multiview_mode);
getViewpointMatrixes(renderer, fmt->projection_mode);
vt->GenBuffers(1, &renderer->vertex_buffer_object);
vt->GenBuffers(1, &renderer->index_buffer_object);
vt->GenBuffers(1, &renderer->texture_buffer_object);
/* The coords will be initialized on first draw */
renderer->valid_coords = false;
return VLC_SUCCESS;
}
static void UpdateZ(struct vlc_gl_renderer *renderer)
{
/* Do trigonometry to calculate the minimal z value
......@@ -798,3 +733,61 @@ Draw(struct vlc_gl_filter *filter, const struct vlc_gl_picture *pic,
return VLC_SUCCESS;
}
int
vlc_gl_renderer_Open(struct vlc_gl_filter *filter,
const config_chain_t *config,
const struct vlc_gl_format *glfmt,
struct vlc_gl_tex_size *size_out)
{
(void) config;
(void) size_out;
const opengl_vtable_t *vt = &filter->api->vt;
struct vlc_gl_sampler *sampler =
vlc_gl_sampler_New(filter->gl, filter->api, glfmt, false);
if (!sampler)
return VLC_EGENERIC;
struct vlc_gl_renderer *renderer = calloc(1, sizeof(*renderer));
if (!renderer)
{
vlc_gl_sampler_Delete(sampler);
return VLC_EGENERIC;
}
static const struct vlc_gl_filter_ops filter_ops = {
.draw = Draw,
.close = Close,
};
filter->ops = &filter_ops;
filter->sys = renderer;
renderer->sampler = sampler;
renderer->api = filter->api;
renderer->vt = vt;
renderer->dump_shaders = var_InheritInteger(filter, "verbose") >= 4;
int ret = opengl_link_program(filter);
if (ret != VLC_SUCCESS)
{
free(renderer);
return ret;
}
const video_format_t *fmt = &sampler->glfmt.fmt;
InitStereoMatrix(renderer->var.StereoMatrix, fmt->multiview_mode);
getViewpointMatrixes(renderer, fmt->projection_mode);
vt->GenBuffers(1, &renderer->vertex_buffer_object);
vt->GenBuffers(1, &renderer->index_buffer_object);
vt->GenBuffers(1, &renderer->texture_buffer_object);
/* The coords will be initialized on first draw */
renderer->valid_coords = false;
return VLC_SUCCESS;
}