BlogFM icon indicating copy to clipboard operation
BlogFM copied to clipboard

Blog for Me

Results 54 BlogFM issues
Sort by recently updated
recently updated
newest added

### STEP3: CPU 指令实现 - 扩展指令 这节是指令介绍的最后一节. 扩展指令, 或者说非法/未被记录的指令: 一般是组合指令. 由于非官方记录, 所以指令名称可能不一致. 本节很多指令并没有在STEP3中实现, 原因是因为使用的测试ROM并没有测试这些指令, 所以'忘记'实现了, 这些指令直到测试了'blOperg's CPU test rom v5'才实现. ### NOP - No OP 除了基本的NOP, 还有高级的NOP. 一般来讲6502指令是根据寻址方式排序的(偏移), 所以在其他寻址方式对应NOP的地方还有 详细的请到引用链接了解...

C/C++
FC/NES

### 星球大战 说到星球大战可能不得不说开场字幕: ![starwar](https://user-images.githubusercontent.com/6801311/43700243-7b2ea8aa-9984-11e8-8b20-f05a920aa882.png) 这种开场字幕可谓经典, 连我这种没看过的都知道, 可见一斑. 现在我们就通过3D图形API渲染出类似的结果, 自己对D3D11较(其他API)熟悉, 文本API则使用配套的DWrite+D2D. 当然这种情况请关闭文本API的子像素渲染功能(Windows上叫ClearType技术, 大致原理一样, 细节或许不同) ### 3D文本 通过3D图形API可以很简单地渲染出来类似的效果, 一般来说有两种方式: 1. 离屏(offscreen)渲染 先通过文本API在一张位图/纹理上渲染出文本 ![a](https://user-images.githubusercontent.com/6801311/43700697-2d8e35f0-9986-11e8-8300-26c6542b9a02.png) 然后贴在一个矩形 ![b](https://user-images.githubusercontent.com/6801311/43700729-4d55f58a-9986-11e8-9602-792ce0070112.png) 2. 转换为三角面 通过文本API获取(tessellate)出三角面 ![c](https://user-images.githubusercontent.com/6801311/43700889-dd42f8dc-9986-11e8-8835-41fd84f84881.png) 然后渲染三角面即可 ![d](https://user-images.githubusercontent.com/6801311/43700995-40295a54-9987-11e8-936e-3f6bc9b6afab.png) 3....

Direct2D
Direct3D

### 解决方法 先说解决方法, 需求后面再说. 构造函数可以有自定义的, 析构函数只有一个. 而且不能直接获取构造/析构函数的指针. 其中C++允许调用其析构函数, 可参考[calling destructor explicitly](https://stackoverflow.com/questions/16720201/calling-destructor-explicitly)和[Destructors (C++)](https://msdn.microsoft.com/en-us/library/6t4fe76c.aspx). 所以这样就可能间接获取析构函数的函数地址了(T是模板): ```cpp // release the object void delete_obj(void*p) noexcept { static_cast(p)->T::~T(); } ``` 那么构造函数呢, 当然也可以直接调用, 不过这不是标准行为: - MSC:...

C/C++

### 进行协同 如果要在D3D11 上进行2D绘制, 使用Direct2D将是一个不错的选择,因为D2D就是由D3D实现的,可以实现几乎无缝地交互协同工作. 微软在[Direct2D and Direct3D Interoperability Overview](https://docs.microsoft.com/en-us/windows/desktop/direct2d/direct2d-and-direct3d-interoperation-overview)中提到了这两种协同: 1. 直接在现有的交换链/RTV 上绘制, 就像一般正交投影绘制的UI一样 2. 绘制到纹理上让模型展示出来. 这样可以干的事情就多了. 特别地, 如果不是专门设计的3D展示UI, 用一般2D的UI然后放在一个矩形里面充当一个伪3D UI也是不错的选择. 这也是[LongUI](https://github.com/dustpg/LongUI)的实现目标之一. ![division](https://user-images.githubusercontent.com/6801311/43296252-db5c5a84-917c-11e8-806b-bd39f6d0b0e1.png) ### 直接协同 如同题目所述: 直接协同. 微软在文中是用一种"共享"的办法, 利用D3D 10作为中介让D3D11与D2D协同,...

Direct2D
Direct3D