python directx_directX嵌入pyside

本文介绍了如何将DirectX嵌入到Pyside中,以创建游戏编辑器。关键点包括获取窗口句柄并进行类型转换,以及使用QTimer模拟OnIdle事件进行画面刷新。通过自定义C++模块与Python交互,实现了DirectX和Pyside的顺利结合。
摘要由CSDN通过智能技术生成

现在能用python来写GUI了,做为一个游戏程序员马上联想到的就是能不能用python来写游戏编辑器。

于是就尝试着把directx嵌入到pyside里面。

在一翻折腾下,directX和pyside,两个初看起来没什么关系的库,居然很好的结合起来。以后写编辑器又多了一个强力工具:)

下面说下整合directx+pyside比较关键的地方。

1.如何获取窗口句柄。

关键之中的关键就是如何那到用于初始化d3d的那一个窗口handl。这个在pyside里边几乎跟Qt下一样,调用窗口类的winId()函数,如果你用的PyQt那么直接将winId返回的值传给C的函数就好。而pyside要蛋疼一点,winId这函数居然返回的是一个PyCObject(注意不是PyObject),我们需要手动的转换一下。以下是转换的python代码:

from ctypes import pythonapi, c_void_p, py_object

pythonapi.PyCObject_AsVoidPtr.restype = c_void_p

pythonapi.PyCObject_AsVoidPtr.argtypes = [ py_object ]

handl = pythonapi.PyCObject_AsVoidPtr(pycobj)

最后得到的handl就可以传个c模块去初始化d3d了。

2.如何刷新。

Qt没有类似wxWidget的OnIdle()事件,也不能像MFC里那样暴力的直接把渲染往消息循环里塞。

我们只好定义一个QTimer对象,每隔20,30毫秒就调用一次渲染函数。

搞定了以上两点,你的directX和pyside就能顺畅地合作了。下面贴一个没

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值