Difference between revisions of "Summer Of Code"
(Fix category) |
Bunglehead (talk | contribs) |
||
Line 207: | Line 207: | ||
For your proposal please think about what the API of such a scripting interface would look like and which information it provides to its callers. | For your proposal please think about what the API of such a scripting interface would look like and which information it provides to its callers. | ||
+ | |||
+ | ---- | ||
+ | === DirectWrite: Implement vertical text layout support === | ||
+ | Possible mentors: [[User:NikolaySivov|Nikolay Sivov]] | ||
+ | |||
+ | Knowledge prerequisite: C | ||
+ | |||
+ | Difficulty: Medium | ||
+ | |||
+ | DirectWrite is a text layout and rendering library available on recent Windows releases, starting with Vista. It provides several API layers to manage font file, process text, render it, and interact with GDI subsystem. A lot of basic functionality is already supported in Wine, this proposal is however about specific feature to process and render text in vertical mode. This touches every layer I mentioned, brief summary on what needs to be done follows: | ||
+ | |||
+ | * AnalyzeVerticalGlyphOrientation - this method analyzes input text and returns orientation for every part of the text; | ||
+ | * GetVerticalGlyphVariants - returns vertical glyphs, for specified nominal glyphs, if font has any; | ||
+ | * vertical glyph metrics should be properly returned, that includes GetDesignGlyphAdvances; | ||
+ | * layout part has to support vertical direction when building lines, this implies baseline calculation, alignment, maybe something else; | ||
+ | * IDWriteBitmapRenderTarget1 and IDWriteGlyphRunAnalysis has to support sideways mode too. | ||
[[Category:Development]] [[Category:Summer of Code]] [[Category:ToDo]] | [[Category:Development]] [[Category:Summer of Code]] [[Category:ToDo]] |
Revision as of 23:39, 1 March 2016
Contents
- 1 Wine and the Google Summer of Code
- 2 Beware of Legal Requirements
- 3 Ideas
- 3.1 Your own idea
- 3.2 Tools - Implement resource editor and / or dialog editor
- 3.3 Tools - Winetest Graphical User Interface
- 3.4 D3DX9 - Implement missing D3DX9 APIs
- 3.5 Direct3D - Microbenchmarks
- 3.6 Direct3DRM - Implement rendering for D3DRM
- 3.7 CMD - implement more robust parser
- 3.8 Xinput / Xbox 360 controller compatibility
- 3.9 Expand Dinput / WinMM (winejoystick.drv) to use HID.dll
- 3.10 Portability - Port WineLib to a new architecture
- 3.11 Implementing XACT sound dlls
- 3.12 WineCE: Implement the CommandBar
- 3.13 Winecfg / winemenubuilder - enhance MIME type handling
- 3.14 XMLLite: Implement fully compatible xmllite parser
- 3.15 Tools - Winetest Scripting Interface
- 3.16 DirectWrite: Implement vertical text layout support
Wine and the Google Summer of Code
This page collects some tips for students who want to work on Wine during the Summer of Code, and provides a few ideas for projects.
- Do you:
- Know C?
- Perhaps have done some Win32 low-level Windows programming already (below MFC)?
- Have an idea to improve Wine and make it more useful and popular?
- Perhaps improve a specific application to run under Wine? (it however needs to be predictable ahead in scope for Summer of Code)
- If so, please introduce yourself on the wine-devel mailing list or the #winehackers IRC channel at freenode.net, and apply for a Google Summer of Code scholarship!
- Hint/reminders:
- Look at Previous Summers Of Code for previously accepted proposals / their results
- Do not forget: we can only support one proposal per application
- We cannot accept ReactOS proposals, so please only make proposals that will benefit Wine.
- Copying proposals verbatim will get your proposal deleted without even looking at it twice. You have to make your own proposal. See also PostgreSQL's Summer Of Code Advice
- Read How can I prepare for GSoC for some general rules.
- Read How Not To Apply For Summer Of Code to save your time and save our time.
- Note: Applicants MUST have submitted a patch or testcase to wine-patches (see http://wiki.winehq.org/SubmittingPatches) to be considered for acceptance.
To apply, go to the Google Summer of Code 2015 home page.
Beware of Legal Requirements
You must state that you will follow these minimal legal requirements during the SoC (and have done so in the past):
- You are not allowed to read or reuse Windows source code (leaked source / Windows Research Kernel* / ...)
(* we are following the SFLC's advice)
- You are not allowed to reverse engineer Windows files by disassembling or decompiling them
- You are not allowed to analyze Windows files with the trace functions of Wine
- People who work or have worked for Microsoft should probably not participate
Ideas
Your own idea
Possible mentors: We'll provide you with the appropriate mentor
- If you have an idea, please post it on Wine Developers mailing list so we can help you with your idea and find out if it's realistic or not. Showing initiative and willing to discuss your idea greatly improves your chances of getting accepted. Even more so than taking one of the ideas below.
- As long as you work hard and interact with the community and your mentor in a positive and constructive way you don't have to worry about not meeting all your goals.
Tools - Implement resource editor and / or dialog editor
Possible Mentors: Marcus Meissner, André Hentschel
Knowledge prerequisite: C, some UI programming perhaps
Difficulty medium, might be bit large for a student project
- We currently have no graphical dialog / resource editor
- Free external ones are AdWare infected or Payware
Tools - Winetest Graphical User Interface
Possible Mentors: André Hentschel
Knowledge prerequisite: C
Difficulty: Easy
- Currently the only way to see test results in a nice synthetic format is to upload the report and view it at test.winehq.org.
- It would be nice to have a mode in winetest.exe that would present a nice table of available tests with their results, ideally updated on the fly as tests are run.
- The list could also be interactive and allow you to click on a test to run it again, view its result log, etc.
D3DX9 - Implement missing D3DX9 APIs
Possible Mentors: Stefan Dösinger, Matteo Bruni
Knowledge prerequisite: C, maybe some domain-specific knowledge related to the APIs you want to implement
Difficulty: Easy to medium, depending on the functions you want to work on
- D3DX9 dlls contain various utility functions related to common 3D graphics tasks. For instance they contain math functions, functions for loading textures, compiling shaders and much more.
- A good chunk of those APIs has been implemented but a lot is still missing, such as:
- some math functions (what's left is mostly about spherical harmonics and precomputed radiance transfer)
- some mesh functions (D3DXComputeNormals(), D3DXOptimizeVertices(), ...)
- a few texture functions
- quite a few ID3DXConstantTable methods
- various shader-related functions (D3DXGetShaderInputSemantics() and D3DXGetShaderOutputSemantics() to name two)
- effect framework bits and pieces
- fonts framework
- The project would choose a reasonable subset of the missing functions and the work would consist of writing behavioral tests for those functions and actually implementing the functions themselves. We will help you in selecting a reasonably-sized subset of the API, suitable for a GSoC project.
Direct3D - Microbenchmarks
Possible Mentors: Stefan Dösinger
Knowledge prerequisite: C, Direct3D, OpenGL
Difficulty: Medium
Debugging performance problems in full games is a challenge. Small test programs that test the performance of single operations can help to locate performance problems and fix them. Once fixed, those test programs can be used as regression tests to detect regressions that are hidden inside the margin of error in games. With an equivalent test case in OpenGL it is possible to separate problems in wined3d from problems in the driver.
Stefan Dösinger has already written test programs for draws, buffer uploads, clears and a few other operations and is testing them on a daily basis. More tests need to be written. The test programs will probably be maintained outside the Wine source tree.
A good application should contain a list of d3d operations to test, a rationale why those operations are good candidates and a short description how each of the tests will be implemented.
Direct3DRM - Implement rendering for D3DRM
Possible Mentors: Stefan Dösinger, André Hentschel
Knowledge prerequisite: C, DirectDraw, Direct3D
Difficulty: Hard
- D3DRM (Direct3D Retained Mode) is mostly a stub, it needs to interact with ddraw to actually display something.
- Even if it's an old library and has been removed in Vista, there are small Games based on it.
- There may be value in making this work on Windows / native ddraw as well.
- Some bugs with games that use d3drm: 12851, 19733, 21670. There are more of them.
- Some functionality in d3drm is already implemented, mostly math helper functions.
Applicants should try to find some more applications that require d3drm and, as far as possible, try to find out which functions and interfaces they use. The proposal should include steps for writing tests and a description how the d3drm implementation will interact with the rest of the d3d libraries.
CMD - implement more robust parser
Possible Mentors: We'll provide you with the appropriate mentor
Knowledge prerequisite: C, CMD commands
Difficulty: Medium
- http://kegel.com/wine/sweng/2010/ is a project to fix a number of small bugs in Wine's cmd.exe and friends, and to write testcases for it. It has helped bring to light certain flaws in cmd.exe's parsing of if/then/else and () blocks.
- Somebody could quite usefully spend a summer bulking up the test cases for cmd and friends, fixing any remaining reported bugs, and improving the parser.
Xinput / Xbox 360 controller compatibility
Possible Mentors: Aric Stewart
Knowledge prerequisite: C
Difficulty: Medium
Work is being done to build a full HID infrastructure in wine. This will make it possible to implement Xinput on top of the HID.dll entry points. Doing this work would be extremely valuable as more and more games are requiring Xinput for controller input.
Expand Dinput / WinMM (winejoystick.drv) to use HID.dll
Possible Mentors: Aric Stewart
Knowledge prerequisite: C
Difficulty: Medium
The new HID infrastructure has a goal of moving all the platform specific code out of the various locations that communicate directly to the underlying OS for gamepad controller support to a single common location, HID. Then we need to rewrite the HID clients to actually be clients of HID.dll instead of having direct platform implementations.
Portability - Port WineLib to a new architecture
Possible mentors: André Hentschel
Knowledge prerequisite: Assembler for the target
Difficulty: Medium, depending on the target
- Wine can run WineLib applications on different CPU architectures, but needs at least some assembler code for that.
- Suggested architectures: PowerPC64 (maybe POWER8?), Sparc64, OpenRISC, x32.
- You will also need a test system. Qemu should be possible.
Implementing XACT sound dlls
Possible mentors: Andrew Eikum
Knowledge prerequisite: C
Difficulty: Medium
The goal here is to implement a subset of the Microsoft Cross-Platform Audio Creation Tool dlls, also known as xact. There are a few sections (xactengine, xaudio, x3daudio, xapof) involved, so only a portion would be done for the project. You should have (or read up on) experience with Linux sound systems (ALSA/OSS) or other audio experience.
WineCE: Implement the CommandBar
Possible mentors: André Hentschel
Knowledge prerequisite: C
Other prerequisite: ARM device with Linux or some Qemu experience
Difficulty: Medium
- WineCE targets to support Windows CE applications, an huge update to revive it will be pushed soon.
- This is an out-of-tree project, but obviously still related to Wine.
- The goal is to implement the CommandBar.
- If there's time you could also implement CommandBands.
Possible Mentors: Michael Müller, Sebastian Lackner
Knowledge prerequisite: C
Difficulty: Medium
Wine tries to integrate Windows programs as much as possible into your unix/linux system and provides ways to directly assign MIME types to programs running in Wine. This makes it possible to open Word when you click on a .docx file in your file browser. However, this kind of integration is not always desirable, especially if there are native programs which support the same MIME type. At the moment a user can only decide to disable this kind of integration completely or Wine will automatically forward all MIME type registrations of Windows programs, resulting in questionable ones like .txt -> notepad and .png -> Wine Internet Explorer. If a user wants to remove such MIME type registration again, it is necessary to manually delete the according files.
The idea of this task is to provide a GUI (most probably as part of winecfg) to control the creation of such MIME type assignments and therefore making Wine more user friendly. You can find ideas how such a GUI could look like in the Forum or in the Bug Tracker. This task is also suitable for new Wine developers as no deep knowledge about the Wine source code is required. It might help though to have some knowledge about Win32 Dialogs.
XMLLite: Implement fully compatible xmllite parser
Possible mentors: Nikolay Sivov
Knowledge prerequisite: C
Difficulty: Medium
- There shoudn't be any external dependencies for parsing functionality
- The main focus should be on the Reader
- Full parser resuming functionality for pending reads
- Unit tests
- Support for external entities to allow nested parser inputs
Tools - Winetest Scripting Interface
Possible mentors: Stefan Dösinger
Knowledge prerequisite: C, scripting language of your choice
Difficulty: Easy
Wine has an extensive set of regression tests. These tests can be helpful for projects Wine depends on. E.g. the developers of 3D drivers may want to run our d3d tests and our d3d implementation to test their OpenGL implementations.
One obstacle Mesa developers reported is that the default way to run tests (run "make test") only reports success or failure. That's OK when all tests are passing, but it is a problem when there are known test failures and you want to make sure you don't introduce additional failures. In this case users have to manually check the output written to stdout, which is a terrible task.
The Wine testbot has some scripts to ignore known failures. It might help developers of dependency libraries if we made them available outside the testbot environment somehow. On the other hand we do not want to make the existing test code more complicated than it is. Ideally the tests themselves would not be modified.
For your proposal please think about what the API of such a scripting interface would look like and which information it provides to its callers.
DirectWrite: Implement vertical text layout support
Possible mentors: Nikolay Sivov
Knowledge prerequisite: C
Difficulty: Medium
DirectWrite is a text layout and rendering library available on recent Windows releases, starting with Vista. It provides several API layers to manage font file, process text, render it, and interact with GDI subsystem. A lot of basic functionality is already supported in Wine, this proposal is however about specific feature to process and render text in vertical mode. This touches every layer I mentioned, brief summary on what needs to be done follows:
- AnalyzeVerticalGlyphOrientation - this method analyzes input text and returns orientation for every part of the text;
- GetVerticalGlyphVariants - returns vertical glyphs, for specified nominal glyphs, if font has any;
- vertical glyph metrics should be properly returned, that includes GetDesignGlyphAdvances;
- layout part has to support vertical direction when building lines, this implies baseline calculation, alignment, maybe something else;
- IDWriteBitmapRenderTarget1 and IDWriteGlyphRunAnalysis has to support sideways mode too.