Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
尘离序散
obs-studio
提交
8219a649
O
obs-studio
项目概览
尘离序散
/
obs-studio
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
obs-studio
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8219a649
编写于
2月 05, 2014
作者:
J
jp9000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove trailing whitespace from gl-x11.c (OCD)
上级
89cfbdc0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
54 addition
and
47 deletion
+54
-47
libobs-opengl/gl-x11.c
libobs-opengl/gl-x11.c
+54
-47
未找到文件。
libobs-opengl/gl-x11.c
浏览文件 @
8219a649
...
...
@@ -14,6 +14,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#include <X11/Xlib.h>
#include <stdio.h>
...
...
@@ -43,30 +44,30 @@ struct gl_windowinfo {
uint32_t
id
;
Display
*
display
;
};
struct
gl_platform
{
GLXContext
context
;
struct
gs_swap_chain
swap
;
};
extern
struct
gs_swap_chain
*
gl_platform_getswap
(
struct
gl_platform
*
platform
)
extern
struct
gs_swap_chain
*
gl_platform_getswap
(
struct
gl_platform
*
platform
)
{
return
&
platform
->
swap
;
}
extern
struct
gl_windowinfo
*
gl_windowinfo_create
(
struct
gs_init_data
*
info
)
extern
struct
gl_windowinfo
*
gl_windowinfo_create
(
struct
gs_init_data
*
info
)
{
struct
gl_windowinfo
*
wi
=
bmalloc
(
sizeof
(
struct
gl_windowinfo
));
memset
(
wi
,
0
,
sizeof
(
struct
gl_windowinfo
));
wi
->
id
=
info
->
window
.
id
;
/* wi->display = info->window.display; */
/*
The above no longer works with Qt.
Let's hope it continues to work.
*/
The above no longer works with Qt.
Let's hope it continues to work.
*/
return
wi
;
}
...
...
@@ -76,12 +77,12 @@ extern void gl_windowinfo_destroy(struct gl_windowinfo *wi)
}
extern
void
gl_getclientsize
(
struct
gs_swap_chain
*
swap
,
uint32_t
*
width
,
uint32_t
*
height
)
uint32_t
*
width
,
uint32_t
*
height
)
{
XWindowAttributes
info
=
{
0
};
XGetWindowAttributes
(
swap
->
wi
->
display
,
swap
->
wi
->
id
,
&
info
);
*
height
=
info
.
height
;
*
width
=
info
.
width
;
}
...
...
@@ -94,9 +95,9 @@ static void print_info_stuff(struct gs_init_data *info)
"Color Format: %i
\n
"
"ZStencil Format: %i
\n
"
"Adapter: %i
\n
"
,
info
->
cx
,
info
->
cy
,
info
->
cx
,
info
->
cy
,
info
->
num_backbuffers
,
info
->
format
,
info
->
zsformat
,
info
->
format
,
info
->
zsformat
,
info
->
adapter
);
}
...
...
@@ -109,16 +110,17 @@ struct gl_platform *gl_platform_create(device_t device,
Display
*
display
=
XOpenDisplay
(
NULL
);
/* Open default screen */
struct
gl_platform
*
plat
=
bmalloc
(
sizeof
(
struct
gl_platform
));
GLXFBConfig
*
configs
;
print_info_stuff
(
info
);
memset
(
plat
,
0
,
sizeof
(
struct
gl_platform
));
if
(
!
display
)
{
blog
(
LOG_ERROR
,
"Unable to find display. DISPLAY variable may not be set correctly."
);
blog
(
LOG_ERROR
,
"Unable to find display. DISPLAY variable "
"may not be set correctly."
);
goto
fail0
;
}
if
(
!
glx_LoadFunctions
(
display
,
DefaultScreen
(
display
)))
{
blog
(
LOG_ERROR
,
"Unable to load GLX entry functions."
);
goto
fail0
;
...
...
@@ -128,14 +130,15 @@ struct gl_platform *gl_platform_create(device_t device,
blog
(
LOG_ERROR
,
"GLX not supported."
);
goto
fail0
;
}
/* We require glX version 1.4 */
{
int
major
=
0
,
minor
=
0
;
glXQueryVersion
(
display
,
&
major
,
&
minor
);
if
(
major
<
1
||
minor
<
4
)
{
blog
(
LOG_ERROR
,
"GLX version found: %i.%i
\n
Required: 1.4"
,
major
,
minor
);
blog
(
LOG_ERROR
,
"GLX version found: %i.%i
\n
Required: "
"1.4"
,
major
,
minor
);
goto
fail0
;
}
}
...
...
@@ -144,26 +147,29 @@ struct gl_platform *gl_platform_create(device_t device,
blog
(
LOG_ERROR
,
"ARB_GLX_create_context not supported!"
);
goto
fail0
;
}
configs
=
glXChooseFBConfig
(
display
,
DefaultScreen
(
display
),
fb_attribs
,
&
num_configs
);
configs
=
glXChooseFBConfig
(
display
,
DefaultScreen
(
display
),
fb_attribs
,
&
num_configs
);
if
(
!
configs
)
{
blog
(
LOG_ERROR
,
"Attribute list or screen is invalid."
);
goto
fail0
;
}
if
(
num_configs
==
0
)
{
blog
(
LOG_ERROR
,
"No framebuffer configurations found."
);
goto
fail1
;
}
/* We just use the first configuration found... as it does everything we want at the very least. */
plat
->
context
=
glXCreateContextAttribsARB
(
display
,
configs
[
0
],
NULL
,
True
,
ctx_attribs
);
if
(
!
plat
->
context
)
{
/* We just use the first configuration found... as it does everything
* we want at the very least. */
plat
->
context
=
glXCreateContextAttribsARB
(
display
,
configs
[
0
],
NULL
,
True
,
ctx_attribs
);
if
(
!
plat
->
context
)
{
blog
(
LOG_ERROR
,
"Failed to create OpenGL context."
);
goto
fail1
;
}
if
(
!
glXMakeCurrent
(
display
,
info
->
window
.
id
,
plat
->
context
))
{
blog
(
LOG_ERROR
,
"Failed to make context current."
);
goto
fail2
;
...
...
@@ -173,34 +179,34 @@ struct gl_platform *gl_platform_create(device_t device,
blog
(
LOG_ERROR
,
"Failed to load OpenGL entry functions."
);
goto
fail2
;
}
blog
(
LOG_INFO
,
"OpenGL version: %s
\n
"
,
glGetString
(
GL_VERSION
));
plat
->
swap
.
device
=
device
;
plat
->
swap
.
info
=
*
info
;
plat
->
swap
.
wi
=
gl_windowinfo_create
(
info
);
plat
->
swap
.
wi
->
display
=
display
;
XFree
(
configs
);
XSync
(
display
,
False
);
return
plat
;
fail2:
glXMakeCurrent
(
display
,
None
,
NULL
);
glXDestroyContext
(
display
,
plat
->
context
);
fail1:
fail1:
XFree
(
configs
);
fail0:
bfree
(
plat
);
return
NULL
;
}
void
gl_platform_destroy
(
struct
gl_platform
*
platform
)
void
gl_platform_destroy
(
struct
gl_platform
*
platform
)
{
if
(
!
platform
)
return
;
return
;
glXMakeCurrent
(
platform
->
swap
.
wi
->
display
,
None
,
NULL
);
glXDestroyContext
(
platform
->
swap
.
wi
->
display
,
platform
->
context
);
XCloseDisplay
(
platform
->
swap
.
wi
->
display
);
...
...
@@ -208,24 +214,25 @@ void gl_platform_destroy(struct gl_platform *platform)
bfree
(
platform
);
}
void
device_entercontext
(
device_t
device
)
void
device_entercontext
(
device_t
device
)
{
GLXContext
context
=
device
->
plat
->
context
;
XID
window
=
device
->
plat
->
swap
.
wi
->
id
;
Display
*
display
=
device
->
plat
->
swap
.
wi
->
display
;
if
(
device
->
cur_swap
)
device
->
plat
->
swap
.
wi
->
id
=
device
->
cur_swap
->
wi
->
id
;
if
(
!
glXMakeCurrent
(
display
,
window
,
context
))
{
blog
(
LOG_ERROR
,
"Failed to make context current."
);
}
}
void
device_leavecontext
(
device_t
device
)
void
device_leavecontext
(
device_t
device
)
{
Display
*
display
=
device
->
plat
->
swap
.
wi
->
display
;
if
(
!
glXMakeCurrent
(
display
,
None
,
NULL
))
{
if
(
!
glXMakeCurrent
(
display
,
None
,
NULL
))
{
blog
(
LOG_ERROR
,
"Failed to reset current context."
);
}
}
...
...
@@ -235,18 +242,18 @@ void gl_update(device_t device)
/* I don't know of anything we can do here. */
}
void
device_load_swapchain
(
device_t
device
,
swapchain_t
swap
)
void
device_load_swapchain
(
device_t
device
,
swapchain_t
swap
)
{
if
(
!
swap
)
swap
=
&
device
->
plat
->
swap
;
device
->
cur_swap
=
swap
;
}
void
device_present
(
device_t
device
)
void
device_present
(
device_t
device
)
{
Display
*
display
=
device
->
plat
->
swap
.
wi
->
display
;
XID
window
=
device
->
plat
->
swap
.
wi
->
id
;
glXSwapBuffers
(
display
,
window
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录